Perl

[top] shebang! #!/usr/bin/perl Always the first line of script.
Specifies to interpret this script using the perl interpreter.


[top] Execute perl -e [script] Executes the script [script].
Does not need the "shebang!" line if executed in this manner.


[top] Conditional Statements

Switch
sub do_switch { my $some_number = shift; my $status = "true"; $_ = $some_number; SWITCH: { # $_ = 1 /^1$/ && do { # do something last SWITCH; }; # $_ = 2 /^2$/ && do { # do something last SWITCH; }; # $_ = 3 /^3$/ && do { # do something last SWITCH; }; # no number matched (default) $status = "false"; } return $status; } The above example presents a nice switch-type statement for Perl, which does not natively provide this construct.


[top] Constants # CONSTANTS - DATE use constant DAYS_OF_THE_WEEK => ["Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat"]; use constant MONTHS => ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"]; Set the constant array values.

my $date_day = DAYS_OF_THE_WEEK->[0]; my $date_month = MONTHS->[3]; Access the constant array values.

$date_day = Sun
$date_month = Apr


[top] Find Modules perl -MFile::Find -le 'find sub{push @m, $File::Find::name if/\.pm$/}, $_ for @INC; print for @m' Lists all the installed perl modules on the current system.


[top] Functions

Pass parameter to function
main(); sub main() { function1("world"); } sub function1 { my $hello = shift; print $hello"; } Pass a parameter to a function.
The above example would pass "world" to function1 and then print the passed in value "world" now set in $hello.

Return value from function
main(); sub main() { my $value = function1(); print $value; } sub function1 { return 1 } Return a value from a function.
The above example would return 1 from function1 and then print "1" which is set in $value.


[top] getlogin() my $login = getlogin(); Gets the executing users login name.


[top] Hashes

Set Hash
%hash = ( "element1" => "value1", "element2" => "value2" ); Here the keys and values of the hash are being explicitly set.
The metedata element1 & element2 are the keys while value1 & value2 are the values of those keys.

Multi-dimensional Hash
my $myhash{$key1}{$key2}++; foreach $key1 ( sort keys (%myhash)) { foreach $key2 ( sort { $key2{$a} <=> $key2{$b} } keys %{ $myhash{$key1} } ) { $value = $myhash{$key1}{$key2}); } } Above is an example of a multidimensional hash in action.

Multi-dimensional Hash
my $myhash{$key1}{$key2}++; foreach $key1 ( sort keys (%myhash)) { foreach $key2 ( sort { $a cmp $b } keys %{ $myhash{$key1} } ) { $value = $myhash{$key1}{$key2}); } } Another example this time sorting string keys.


[top] hostname() use Sys::Hostname; my $hostname = hostname(); Sets $hostname to the current server's name.


[top] Mail my $receipients = "my list of receipients goes here"; my $subject = "my subject goes here"; my $body = "my body goes here"; open(MM, qq(|/bin/mail -s "$subject" $receipients)); print MM $body; close MM;
Send mail using mail.
my $mail_file = "mail.txt"; my $receipients = "my list of receipients goes here"; my $subject = "my subject goes here"; my $body = "my body goes here"; open (MAILFILE,">$mail_file") or die "Could not write $mail_file!"; print MAILFILE "To: " . $receipients . "\n"; print MAILFILE "Subject: $subject\n"; print MAILFILE "$body\n"; close (MAILFILE); system ("/usr/sbin/sendmail -t < $mail_file"); Send mail using sendmail.


[top] Options - parse for (my $argc = 0; $argc <= $#ARGV; $argc++) { if ($ARGV[$argc]) { $opt = $ARGV[$argc]; $opt =~ s/--//; # Get rid of 2 dashes $opt =~ s/-//; # Get rid of 1 dash $opt = substr($opt,0,1); # cut the first char } if ($opt eq 'c') { $arg_cron = "true"; } elsif ($opt eq 'e') { $arg_event = $ARGV[++$argc]; $check_event = check_event($arg_event); if ($check_event eq "false") { usage(); exit 1; } } elsif ($opt eq 'h') { usage(); exit 0; } elsif ($opt eq 'l') { $arg_lp = $ARGV[++$argc]; $check_lp = check_lp($arg_lp); if ($check_lp eq "false") { error("Print $arg_lp not found.", 105); } } else { usage(); exit 1; } } The above example parses out all possible options.


[top] Read File my $file = "myfile.txt"; open (FILE, "$file"); while (<FILE>) { chomp ($_); print "$_\n"; } close (FILE); Opens a file (myfile.txt) for reading and then prints it's contents.


[top] Usage sub usage { print "\nusage: $prog [-c] [-e entity] [-h] [-l printer_id]\n\n"; print "Options:\n"; print " -c flag indicating this program is being run as a cron job"; print " -e entity run program on a single specified entity\n"; print " -h usage information\n"; print " -l printer_id print to a specified printer id\n"; print "\n"; } The above example gives a nice template to use for a usage function.