unless expression: when condition is false execute the block.
unless($fred=~/^[A-Z_]\w*$/i){ print "The value of \$fred doesn't look like a perl identifier name.\n";}
It's the same as written like this:
if($fred=~/^[A-Z_]\w*$/i){ # do nothing}else{ print "The value of \$fred doesn't look like a perl identifier name.\n";}
Or:
if(!($fred=~/^[A-Z_]\w*$/i)){ print "The value of \$fred doesn't look like a perl identifier name.\n";}
until expression: when condition is false execute the loop.
until($j>$i){ $j *= 2;}
if expression can be written without a block of {}
print "$n is a negative number.\n" if $n < 0;
Perl execute 'if $n < 0' first, if it's true then execute the print expression, if false do nothing.
Those styles are all popular in Perl:
&error("Invalid input") unless &valid($input);$i *=2 until $i > $j;print " ", ($n += 2) while $n < 10;&greet($_) foreach @person;
If there are more than one expression, better to write them in {} blocks.
elsif expression:
if(condition){ do something;}elsif(condition){ do something;}elsif(condition){ do something;}else{ do something;}
my $bedrock=42;$bedrock++;
my @people=qw{ Fred barney Fred wilma dino barney Fred pebbles };my %count;$count{$_}++ foreach @people;
++ means +1 byself, undef++ gets 1
my $n=++$m;$m add 1, then give value to $n.
my $n=$m++;give value to $n, then $m add 1.
for (init;test;increment){ body; body;}
for(i=1;$i<=10;$i++){ print "I can count to $i!\n";}
Any of init, test, increment can be empty, but the symbol ';' should be there.
for($_="bedrock";s/(.)//;){ # whenever s/// successes, loop continue print "One character is: $1\n";}
for(1..10){ print "I can count to $_!\n":}
Here 'for' is the same as foreach. for and foreach are the same in Perl, Perl will judge by the contents in (). If there're ';' in () then it's for, otherwise it's foreach.