\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Nikolay Mishin (mishin)} \pdfinfo{ /Title (perl-short-version.pdf) /Creator (Cheatography) /Author (Nikolay Mishin (mishin)) /Subject (Perl, short version Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{E0ABFF} \definecolor{LightBackground}{HTML}{F7EAFF} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Perl, short version Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Nikolay Mishin (mishin)} via \textcolor{DarkBackground}{\uline{cheatography.com/1008/cs/457/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Nikolay Mishin (mishin) \\ \uline{cheatography.com/mishin} \\ \uline{\seqsplit{mishin}.narod.ru} \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 16th July, 2012.\\ Updated 12th May, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Hash Slices}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{use Modern::Perl; \newline % Row Count 1 (+ 1) my \$input\_line = shift; \newline % Row Count 2 (+ 1) my \%colors = ( \newline % Row Count 3 (+ 1) red =\textgreater{} 'apple', \newline % Row Count 4 (+ 1) green =\textgreater{} 'leaves', \newline % Row Count 5 (+ 1) blue =\textgreater{} 'ocean', \newline % Row Count 6 (+ 1) ); \newline % Row Count 7 (+ 1) \$colors\{"red"\} = 'apple'; \newline % Row Count 8 (+ 1) \$colors\{"green"\} = 'leaves'; \newline % Row Count 9 (+ 1) \$colors\{"blue"\} = 'ocean'; \newline % Row Count 10 (+ 1) ( \$colors\{"red"\}, \$colors\{"green"\}, \$colors\{"blue"\} ) = \newline % Row Count 12 (+ 2) ( 'apple', 'leaves', 'ocean' ); \newline % Row Count 13 (+ 1) @colors\{ "red", "green", "blue" \} = ( 'apple', 'leaves', 'ocean' ); \newline % Row Count 15 (+ 2) my @avaible\_colors = qw(red green blue); \newline % Row Count 16 (+ 1) my @avaible\_things = qw(apple leaves ocean); \newline % Row Count 17 (+ 1) @colors\{@avaible\_colors\} = @avaible\_things;\#1 \newline % Row Count 18 (+ 1) \#for ref \newline % Row Count 19 (+ 1) my \$ref\_colors = \textbackslash{}\%colors; \newline % Row Count 20 (+ 1) @\{\$ref\_colors\}\{@avaible\_colors\} = @avaible\_things;\#the same as 1 but for ref \newline % Row Count 22 (+ 2) say \$colors\{\$input\_line\}; \newline % Row Count 23 (+ 1) say \$\{\$ref\_colors\}\{\$input\_line\}; \newline % Row Count 24 (+ 1) say "@\{\$ref\_colors\}\{@avaible\_colors\}"; \newline % Row Count 25 (+ 1) \# \seqsplit{http://docstore.mik.ua/orelly/perl/learn/ch05\_05.htm} \newline % Row Count 27 (+ 2) \# \seqsplit{http://www.webquills.net/web-development/perl/perl-5-hash-slices-can-replace.html}% Row Count 29 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \columnbreak \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Perl short tips}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{Merge Hash}} slow (merge \%score into \%league)} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}\%league = (\%league, \%score);} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Merge Hash faster} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}\%league\{keys \%score\} = values \%score;} \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{Write array to file}}. use File::Slurp qw( :std );} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}my @vip\_array\_out = map \{ "\$\_\textbackslash{}n" \} @vip\_array;} \tn % Row Count 7 (+ 3) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{the same} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}my \$vip\_string\_out = join "\textbackslash{}n", @vip\_array;} \tn % Row Count 10 (+ 3) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{slow} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}write\_file( 'file', @vip\_array\_out );\#} \tn % Row Count 12 (+ 2) % Row 5 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{faster} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}write\_file( 'file', \textbackslash{}@vip\_array\_out );\#} \tn % Row Count 14 (+ 2) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{faster then \$vip\_string\_out} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}write\_file( 'file', \textbackslash{}\$vip\_string\_out );} \tn % Row Count 16 (+ 2) % Row 7 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Split by {\bf{WORD}}} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}my @words = split /\textbackslash{}W+/, @input\_lines;} \tn % Row Count 18 (+ 2) % Row 8 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{Get unique words}}} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}my \%seen; map \{ \$seen\{\$\_\}++ \} @words;} \tn % Row Count 20 (+ 2) % Row 9 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Sort the words in ascending ASCII order in the output} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}for my \$word ( sort keys \%seen ) \{ say "for \$word \$seen\{\$word\}"; \}} \tn % Row Count 24 (+ 4) % Row 10 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{{\bf{Save hash in insert order}}} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}use Tie::IxHash;} \tn % Row Count 26 (+ 2) % Row 11 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{tie \%sort\_seen, "Tie::IxHash";} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}use Data::Dumper;} \tn % Row Count 28 (+ 2) % Row 12 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\$Data::Dumper::Terse = 1;} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}map \{ \$sort\_seen\{\$\_\} = \$seen\{\$\_\} \} sort keys \%seen;} \tn % Row Count 31 (+ 3) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Perl short tips (cont)}} \tn % Row 13 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{print Dumper \textbackslash{}\%sort\_seen;} \tn % Row Count 1 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Read config}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{use YAML::Tiny; \newline % Row Count 1 (+ 1) use Carp; \newline % Row Count 2 (+ 1) use English; \newline % Row Count 3 (+ 1) my \$conf = \newline % Row Count 4 (+ 1) \seqsplit{YAML::Tiny::LoadFile('config}.yml') \newline % Row Count 5 (+ 1) or croak "Couldn't open YAML::Tiny-\textgreater{}errstr: \$OS\_ERROR"; \newline % Row Count 7 (+ 2) my \$user = \$conf-\textgreater{}\{user\}; \newline % Row Count 8 (+ 1) my \$password = \$conf-\textgreater{}\{password\}; \newline % Row Count 9 (+ 1) config.yml is \newline % Row Count 10 (+ 1) -{}-{}- \newline % Row Count 11 (+ 1) user: 'mishin' \newline % Row Count 12 (+ 1) password: 'secret\_pw'% Row Count 13 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Slices}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{array slice} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}(\$him, \$her) = @folks{[}0,-1{]};} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{@them = @folks{[}0 .. 3{]};} \tn % Row Count 3 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{hash slice} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}(\$who, \$home) = @ENV\{"USER", "HOME"\};} \tn % Row Count 5 (+ 2) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{list slice} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}(\$uid, \$dir) = (getpwnam("daemon")){[}2,7{]};} \tn % Row Count 7 (+ 2) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{@days{[}3..5{]} = qw/Wed Thu Fri/;} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}@colors\{'red','blue','green'\} = (0xff0000, 0x0000ff, 0x00ff00);} \tn % Row Count 10 (+ 3) % Row 5 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{@folks{[}0, -1{]} = @folks{[}-1, 0{]};} \tn \mymulticolumn{1}{x{5.377cm}}{\hspace*{6 px}\rule{2px}{6px}\hspace*{6 px}\seqsplit{http://perldoc.perl.org/perldata.html\#Slices}} \tn % Row Count 12 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}