Perl is a highly capable, feature-rich programming language with over 25 years of development. These notes follow the path of the Learning Perl book.
@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.undef
before being assigned. undef
acts as a 0 or “” as needed, but will throw a warning if printed.defined()
checks if a variable has been defined. Can also set a variable to undef
.()
, the empty list and not undef
.$myarr[0]
- undef
if never set.$#arr
('abc','def')
or (1..6)
(integers 1 to 6) or qw(abc def)
or qw#abc def#
(quoted by whitespace).($fred, $barney, $dino) = ("flintstone", "rubble", undef); ($fred, $barney) = ($barney, $fred); # swap those values
push
adds element(s) to end of array. pop
removes a single element and returns it.unshift
adds element(s) to start of array. shift
removes a single element and returns it.splice
removes elements from middle of array, returns them and optionally replaces them splice @arr, start, len, @newelems
sort
and reverse
functions return the modified list (can be saved to original array variable).scalar
function forces a scalar context e.g. for print function.%hash
has its own namespace.$hash{$some_key}
to access a value (curly-braces instead of square braces).%some_hash = ('a', 1, 'b', 2, 'c', 3); %some_hash = ( 'a' => 1, 'b'=>2, 'c'=>3,);
%some_hash = ( a => 1}; $some_hash{a};
%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.if ($a == $b) { a = 0; } elsif ($a > $b) { a = 1; } else { a = -1; }
$count=0; while ($count < 10) { $count += 2; }
foreach my $rock (@rocks) { # modifications to $rock modify the list element # $_ is used if loop variable is omitted }
$line = <STDIN>;
chomp
removes a newline e.g. chomp($line=<STDIN>);
chomp(@lines = <STDIN>);
while (<STDIN>) { print "I saw $_"; }
foreach
can also be used but uses more memory since it reads all input into memory first.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)';
select
can be used to change default output filehandle. $| = 1;
unbuffers currently selected output.&mysub
(sometimes the ampersand can be omitted).sub mysub { my($m, $n) = @_ $m + $n; }
return $a;
can be used to return immediately.wantarray
can be used to detect list or scalar context).&mysub;
is used, the parent's argument list is inherited.my
.state $x;
can be used to declare a private variable that keep state between calls.