Perl Syntax: Basic Script
Perl Syntax: Basic Script
[Basic Script]
[Data Types]
[Conditionals]
[Loops and Iterations]
[Functions]
[Regular Expressions]
[Special Variables]
[Standard IO]
[Useful Functions and Keywords]
other languages..
Basic Script
#############################################################################
#
# name: main
# purpose: entry point of the script
#############################################################################
#
# @ARGV holds all script command line arguments (pos 0 is not prog-name)
# $0 holds script filename
print "hello world\n";
Data Types
#############################################################################
#
# name: main
# purpose: show the basic datatypes
#############################################################################
#
# scalar operations
$num = $num*2 + 3 - $float; # $num is 23.86
$num = 2**4 % 5; # $num is 1 - exp then modulus
$num++; # $num is 2 - inc after eval
$ms = (1<< 3)&0xff|0x03^0x01; # $ms is 0x0a
print ++($foo = '99'); # prints '100' - inc before eval
$new = $str." world"; # $new is "hello world"
# array operations
$first = $nums[0]; # $first is 1
$strings[1] = "neo"; # @strings is ("one","neo")
$mixed[2] = 37; # @mixed is ("three",3.13,37) - grows automatically
@joined = (@mixed,8); # @joined is ("three",3.13,37,8)
@sl = @nums[0,-1,1]; # @sl is (1,3,2) - array slice (specific indices)
@sl = @nums[0..2]; # @sl is (1,2,3) - array slice (span)
$len = scalar(@nums); # an array in scalar context is the list length (3)
$last_index = $#nums; # $last_index is 2 (the last index in the list)
$#nums = -1; # @nums is () - empty
# hash operations
$jims_age = $ages{"jim"}; # $jims_age is 18
$ages{"jim"}++; # key "jim" has value of 19 in %ages
$ages{"ron"} = 24; # key "ron" with value 24 added to %ages
@sl = @ages{"ted","ron"}; # @sl is (21,24) - hash slice
$stats = scalar(%ages); # string eg. "1/16" - 1 used bucket out of 16
alloced
# reference operations
$num_copy = $$scalarref; # dereference using {type}$reference
@mixed_copy = @$arrayref;
$value = $$hashref{"jim"};
$value = $arrayref->[0]; # or dereference using $reference->
$value = $hashref->{"jim"};
Conditionals
#############################################################################
#
# name: main
# purpose: show the basic conditionals
#############################################################################
#
# return values
sub seventeen1 # return keyword indicated return value
{
return 17;
}
sub seventeen2 # if no return exists, retval is the last
expression
{
17;
}
$num = seventeen1() + seventeen2() + 53;
sub retlist # all datatypes can be returned
{
return (1,2,3);
}
($one,$two,$thr) = retlist; # () are optional (even when we have args)
# arguments
sub has_args
{
@func_arguments = @_; # all arguments are members of the list @_
$first_arg = $_[0]; # returns undef if no arg given
($arg1,$arg2,$arg3) = @_; # the common perl way to handle function
arguments
}
has_args($num,@l1,22,@l2); # all arguments are flattened into one list
sub takes_two_lists # to pass several lists / hashes, use references
{
($l1ref,$l2ref) = @_;
@list1 = @$l1ref;
}
takes_two_lists(\@a,\@b);
Regular Expressions
#############################################################################
#
# name: main
# purpose: show regular expression usage
#############################################################################
#
# matching
$call911 = 'Someone, call 911.'; # the string we want to match upon
$found = ($call911 =~ /call/); # $found is TRUE, matched 'call'
@res = ($call911 =~ /Some(...)/); # @res is ('one'), matched 'Someone'
$entire_res = $&; # $entire_res is 'Someone'
$brack1_res = $1; # $brack1_res is 'one', $+ for last
brackets
($entire_pos,$brack1_pos) = @-; # $entire_pos is 0, $brack1_pos is 4
($entire_end,$brack1_end) = @+; # $entire_end is 7, $brack1_end is 7
# global matching (get all found)
$call911 =~ /(.o.)/g; # g is global-match, $1 is 'Som', $2 is
'eon'
@res = ($call911 =~ /(.o.)/g); # @res is ('Som','eon'), $& is 'eon'
# substituting
$greeting = "hello world"; # the string we want to replace in
$greeting =~ s/hello/goodbye/; # $greeting is 'goodbye world'
# splitting
@l = split(/\W+/,$call911); # @l is ('Someone','call','911')
@l = split(/(\W+)/,$call911); # @l is ('Someone',', ','call','
','911','.')
# pattern syntax
$call911 =~ /c.ll/; # . is anything but \n, $& is 'call'
$call911 =~ /c.ll/s; # s is singe-line, . will include \n, $& is 'call'
$call911 =~ /911\./; # \ escapes metachars {}[]()^$.|*+?\, $& is '911.'
$call911 =~ /o../; # matches earliest, $& is 'ome'
$call911 =~ /g?one/; # ? is 0 or 1 times, $& is 'one'
$call911 =~ /cal+/; # + is 1 or more times, $& is 'call', * for 0 or
more
$call911 =~ /cal{2}/; # {2} is exactly 2 times, $& is 'call'
$call911 =~ /cal{0,3}/; # {0,3} is 0 to 3 times, $& is 'call', {2,} for >=
2
$call911 =~ /S.*o/; # matches are greedy, $& is 'Someo'
$call911 =~ /S.*?o/; # ? makes match non-greedy, $& is 'So'
$call911 =~ /^.o/; # ^ must match beginning of line, $& is 'So'
$call911 =~ /....$/; # $ must match end of line, $& is '911.'
$call911 =~ /9[012-9a-z]/;# one of the letters in [...], $& is '91'
$call911 =~ /.o[^m]/; # none of the letters in [^...], $& is 'eon'
$call911 =~ /\d*/; # \d is digit, $& is '911'
$call911 =~ /S\w*/; # \w is word [a-zA-Z0-9_], $& is 'Someone'
$call911 =~ /..e\b/; # \b is word boundry, $& is 'one', \B for non-
boundry
$call911 =~ / \D.../; # \D is non-digit, $& is ' call', \W for non-word
$call911 =~ /\s.*\s/; # \s is whitespace char [\t\n ], $& is ' call '
$call911 =~ /\x39\x31+/; # \x is hex byte, $& is '911'
$call911 =~ /Some(.*),/; # (...) extracts, $1 is 'one', $& is 'Someone,'
$call911 =~ /e(one|two)/; # | means or, $& is 'eone'
$call911 =~ /e(?:one|tw)/;# (?:...) does not extract, $& is 'eone', $1 is
undef
$call911 =~ /(.)..\1/; # \1 is memory of first brackets, $& is 'omeo'
$call911 =~ /some/i; # i is case-insensitive, $& is 'Some'
$call911 =~ /^Some/m; # m is multi-line, ^ will match start of entire
text
$call911 =~ m!call!; # use ! instead of /, no need for \/, $& is 'call'
Special Variables
#############################################################################
#
# name: main
# purpose: show some special internal variables
#############################################################################
#
# $_ - default input
print for (1..10); # in many places, no var will cause work on $_
print $_ for $_ (1..10); # same as above
Standard IO
#############################################################################
#
# name: main
# purpose: show some basic IO and file handling
#############################################################################
#
# cleanup
close(IN);
close(OUT);
Powered by Notepad.