#!/usr/bin/env perl # unless == if not # my $target=10; my $while_count=0; while ($while_count < $target){ $while_count++; } print "while_count = $while_count\n"; my $unless=0; unless ($unless >= $target){ $unless++; } print "unless = $unless\n"; my $until_count=0; until ($until_count >= $target){ $until_count++; } print "until_count = $until_count\n"; ####### #!/usr/bin/env perl sub regular_way { my $n = shift; my $sum; foreach (1 .. $n){ $sum += $_; } $sum; } sub recursive_way { my $current=shift; if ($current == 0) { return 0; } else { return ($current + recursive_way($current - 1)); } } #main start my $r = regular_way 100; print "1+...+100=", $r, "\n"; $r = recursive_way 10; print "1+...+10=", $r, "\n"; ####### #!/usr/bin/env perl #modify a scalar inside a subroutine sub try_add { my $val = shift; $val++; } my $n=0; try_add $n; print "n = $n\n"; sub add_one { my $ref = shift; $$ref++; } add_one \$n; print "n = $n\n"; #### #!/usr/bin/perl my $x = 10; my $rx = \$x; # reference to $x $$rx = $$rx * 2; # change $x via $xr, same as $x = $x * 2; print $x; #20 print $$rx; #20 print $rx ; #SCALAR(0x8270a97b0) print "\n"; my @a = (1..3); # init array and assign vals my $ra = \@a; # ra reference to array my $i = 0; foreach (@$ra){ print("$ra->[$i++] \n"); # $a[0] } my %h = (1, 'january', 2, 'february', 3, 'march'); #hash 1 => 'january' ... my $rh=\%h; foreach (keys %$rh){ print "$_ $$rh{$_}\n"; # $h{1} } ### #!/usr/bin/env perl my @names = qw /Yabba Dabba do/; my $names_ref = \@names; print "$names_ref\n"; # ARRAY(0x703dcf2) print "@$names_ref\n"; # Yabba Dabba do print "@{ $names_ref }\n"; # same as above, but clear. it use {} to print "@names\n"; # original way print "number of names = " , scalar @names, "\n"; print "max index of names = ", $#names , "\n"; # # Array Array Reference #Whole array: @names @{ $names_ref } # same as @$names_ref #Element of array: $names[0] ${ $names_ref }[0] # saem as $$names_ref[0] $names_ref->[0] # different a=> #Size of array: scalar @names scalar @$names_ref #Largest index: $#names $#$names_ref ####### #!/usr/bin/env perl my @array = (100..103); # use list to init array my $refa = \@array; # reference to array print $$refa[0], "\n"; print $refa->[0], "\n"; my %h = ( john => 194, jack => 168 ); print "jack height is ", $h{jack}, "\n"; %h=(); # init hash, make it empty %h= ( john => [174,67], jack => [168, 72] ); # anonymous array as value print "jack height and weight are ", $h{jack}[0], " ", $h{jack}[1], "\n"; my @heart_rate=(174, 155, 181, 160); my $refa=\@heart_rate; %h=(); #%h= ( john => @heart_rate); # wrong, since hash treat this array as value %h= ( john => $refa ); print "john heart beating: "; foreach ( @$refa ) { print "$_ "; }