- Program Stub / Typical Flow
#!/usr/bin/perl
open IN, “<”, inputfile.txt;
open OUT, “>”, outputfile.txt
if($#ARGV != 2) {
print “ERROR - need 2 args!\n”;
exit;
}
$arg1 = $ARGV[0];
$arg2 = $ARGV[1];
while(<IN) {
$l = $_;
chomp($l):
…
}
close IN;
close OUT;
- Read/Write files
open FILE, "first2.txt" or die "Personalized error message!!!";
open FILE, "first2.txt" or die $!; # generic error message will be stored in $! variable
open FILE, “>output.txt” or die $!”;
# to use a variable for the filename, it is easier to write the mode in it’s own comma-separated quotes like this:
open FILE, "<", $mine or die $!;
open OUT, ">>", $yours or die $!;
<file.txt (read but DON’T create or truncate/delete/overwrite)
>file.txt (write, create and truncate/overwrite)
>>file.txt (append or create)
* adding ‘+’ allows for simultaneous reading and writing
+< (read/write, but DON’T create or truncate/delete/overwrite)
+> (read/write, create and truncate/overwrite)
+>> (read/append or read/create-write)
-- check if a file exists
$file = ‘ /dir/file.txt’;
if (-e $file) {
print “File exists!”;
}
- FILEHANDLE directly to array
- The file will only be read once per open statement so you can’t do @lines = <FILE> and then while(<FILE>) without closing FILE and re-opening it in between the two <FILE> lines of code.
my @lines = <FILE>;
- Arrays
@myArray = ();
$length = @myArray;
if (exists $myArray[$ind]) #Value EXISTS, but may be undefined.
if(defined $myArray[$ind]) #Value is DEFINED, but may be false.
if($myArray[$ind]) #Value at array index $index is TRUE.
- Hash
# initialize by assigning to an empty list
%hash = ();
# add value
$hash { ‘key' } = ‘value’;
$hash { $key} = $value; # with vars
%hash = (
key1 => $val1,
key2 => $val2,
key3 => $val3,
);
# reference values of hash
$href->{ ‘key’ } = ‘value’;
$href->{ $key } = $value; # with vars
MORE ON HASHES AND HASH REFERENCES
keys()
value()
- Sub routines
# call subroutine
$result = doSomething($input);
# actual subroutine
sub doSomething(){
my $var1 = shift(@_);
….
return $var2;
}
- Regex
I remember pretty well
- Loops
foreach (@myArray) {
print $_;
}
foreach $item (@myArray) { # use scalar as iterator for readability
print $item;
}
$linecount++ while (<FILE>);
do { # execute do statement before testing expression
$calc += ($fact * $val); # using an assignment operator
# equivalent to $calc = $calc + ($fact * $val);
} while ($calc < 100);
split, push, pop, shift etc??????
- Good Resources
http://en.wikibooks.org/wiki/Perl_Programming/Operators
http://www.cs.mcgill.ca/~abatko/computers/programming/perl/howto/hash/
http://www.troubleshooters.com/codecorn/littperl/perlsub.htm
http://www.cs.cmu.edu/afs/cs/usr/rgs/mosaic/pl-predef.html Predefined names in Perl
http://cslibrary.stanford.edu/108/EssentialPerl.html
http://perldoc.perl.org/functions