Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
notes:perl_cheat_sheet [2013/09/11 16:53]
smthng [User Subroutines]
notes:perl_cheat_sheet [2013/09/22 19:28] (current)
smthng [Hashes]
Line 13: Line 13:
   * Comments start with # (no block comments)   * Comments start with # (no block comments)
   * Parenthesis are optional unless part of syntax.   * Parenthesis are optional unless part of syntax.
 +  * ''@ARGV'' contains arguments, $0 contains program name.
 +  * ''die''/''warn'' can be used to exit/warn, $! will contain any system error message. Without \n at the end, perl will append line number to error message.
  
 ===== Numbers ===== ===== Numbers =====
Line 59: Line 61:
   * Expressions parsed in either a scalar context or a list context. Scalars are promoted to single-element lists in list context.    * Expressions parsed in either a scalar context or a list context. Scalars are promoted to single-element lists in list context. 
   * List functions may return different scalars - array variables return number of elements. The ''scalar'' function forces a scalar context e.g. for print function.   * List functions may return different scalars - array variables return number of elements. The ''scalar'' function forces a scalar context e.g. for print function.
 +
 +===== Hashes =====
 +
 +  * A hash is a list indexed by a string (key) - a collection of key-value pairs. ''%hash'' has its own namespace.
 +  * Uses scalable, efficient algorithms. Used to be called associative arrays.
 +  * ''$hash{$some_key}'' to access a value (curly-braces instead of square braces).
 +  * Assigning a hash to an array unwinds (flattens) it. 
 +  * To initialize a hash :<code perl>%some_hash = ('a', 1, 'b', 2, 'c', 3);
 +%some_hash = ( 'a' => 1, 'b'=>2, 'c'=>3,);</code>
 +  * When using a big arrow (a fat-comma) or when accessing a value, simple keys don't have to be quoted (barewords) e.g. <code perl>%some_hash = ( a => 1}; $some_hash{a};</code>
 +  * ''%revhash = reverse %hash'' to reverse a hash (for non-unique values, last one wins).
 +  * ''keys %hash;'' and ''values %hash;'' return a list of keys or value in same order (or # of keys/values in scalar context).
 +  *  '' %hash'' is true only if hash has at least one key-value pair.
 +  * To iterate over hash : <code perl>while ( ($key, $value) = each %hash ) {
 +  print "$key => $value\n"; }</code> or in order of keys <code perl>foreach $key (sort keys %hash) {
 +  print "$key => $hash{$key}\n"; } </code>
 +  * %ENV hash holds environment variables.
  
 ===== Control Structures ===== ===== Control Structures =====
Line 82: Line 101:
   * Read a line of input - ''$line = <STDIN>;''   * Read a line of input - ''$line = <STDIN>;''
   * ''chomp'' removes a newline e.g. ''chomp($line=<STDIN>);''   * ''chomp'' removes a newline e.g. ''chomp($line=<STDIN>);''
-  * Assigning <STDIN> to a list reads all input up till EOF e.g. <code perl> chmop(@lines = <STDIN>);</code> +  * Assigning <STDIN> to a list reads all input up till EOF e.g. <code perl> chomp(@lines = <STDIN>);</code> 
 +  * Loop over input ($_ can only be used in this specific case) <code perl>while (<STDIN>) { 
 +    print "I saw $_"; 
 +}</code> 
 +  * ''foreach'' can also be used but uses more memory since it reads all input into memory first. 
 +  * ''<>'' iterates over all files in @ARGV (or STDIN if no args) like e.g. cat/sed/awk. <code perl>while (<>) { 
 +    chomp; 
 +    print LOGFILE "It was $_ that I saw!\n"; 
 +}</code> 
 +  * ''print'' takes list of items and sends all to STDOUT (unseparated). ''print @array;'' vs ''print "@array";'' <code perl>print <>;          # source code for 'cat' 
 +print sort <>;     # source code for 'sort'</code> 
 +  * C-like printf function %g for number auto-format,%10s, %-10d etc.<code perl>my @items = qw( wilma dino pebbles ); 
 +my $format = "The items are:\n" . ("%10s\n" x @items); 
 +printf $format, @items; 
 +printf "The items are:\n".("%10s\n" x @items), @items; 
 +</code> 
 +  * Filehandles can be barewords (upper-cased) or variables. Special filehandles are : STDIN, STDOUT, STDERR, DATA, ARGV, and ARGVOUT .<code perl>open CONFIG, '<dino';  # < is optional 
 +open BEDROCK, '>fred' || die "Cannot open fred: $!"; 
 +open LOG, '>>:encoding(UTF-8)','logfile'; # for perl >= 5.6 
 +open my $bedrock, '>:crlf', $file_name; # DOS-formatted output 
 +binmode STDOUT, ':encoding(UTF-8)';</code> 
 +  * ''select'' can be used to change default output filehandle. ''$| = 1;'' unbuffers currently selected output.
 ===== User Subroutines ===== ===== User Subroutines =====
  
Line 92: Line 131:
 } </code> } </code>
   * The value of the last expression evaluated is returned. But ''return $a;'' can be used to return immediately.   * The value of the last expression evaluated is returned. But ''return $a;'' can be used to return immediately.
 +  * A list can be returned if the subroutine is called in a list context (''wantarray'' can be used to detect list or scalar context).
   * Arguments are in the list @_ . If ''&mysub;'' is used, the parent's argument list is inherited.   * Arguments are in the list @_ . If ''&mysub;'' is used, the parent's argument list is inherited.
   * Lexical scoped variables can be used in any block by prefixing with ''my''.   * Lexical scoped variables can be used in any block by prefixing with ''my''.
 +  * In Perl 5.10 and up ''state $x;'' can be used to declare a private variable that keep state between calls.
   * Ampersand is optional if subroutine has previously been declared or if parenthesis are used. Ampersand is not optional if built-in subroutine is being overridden.   * Ampersand is optional if subroutine has previously been declared or if parenthesis are used. Ampersand is not optional if built-in subroutine is being overridden.
Recent changes RSS feed Creative Commons License Donate Minima Template by Wikidesign Driven by DokuWiki