Get The Last Modification Time Of A File
#
## get the modification time of a file
#
$mtime = (stat($file))[9];
Get the Size of a File
#
## get the size of a file
#
$size = (-s $file);
read input interactively
#
## read input line into variable $buf
#
print "Enter a number : ";
chomp($buf = <STDIN>);
Read a File quickly into a variable
#
## slurp a file -- read $size number of bytes into variable $buf
#
$size = (-s $file);
open(IN,"$file");
read(IN,$buf,$size);
close(IN);
Creating Directories
#
## To avoid umask calculations,
## save the current umask while setting the umask to 000,
## make the directory, then set the umask back to what it had been
#
if (! -d $localdir)
{
$old = umask(000);
mkdir($localdir,0775);
umask($old);
}
Get The Current Directory
#
## get the current directory
#
use Cwd;
$pwd = cwd();
Read A Directory
#
## read a directory $dir ( ignoring . and .. )
#
opendir(DIR,"$dir") || die "opendir $dir failed";
@files = grep(!m#^\.\.?$#,readdir(DIR));
closedir(DIR);
Recursively Read a Directory
#
## recursively read a directory, $startdir finding all files
## at the end all directory names are in @dirs, all files are in @files
#
push(@dirs,$startdir); # add an element to an array
foreach $dir (@dirs) # loop through the elements of an array
{
opendir(DIR,"$dir") || die "opendir $dir failed";
@list = grep(!/^\.\.?$/,readdir(DIR));
closedir(DIR);
foreach $item (@list)
{
$fullname = $dir."/".$item; # add the directory name to the file name
if (-d $fullname)
{
push(@dirs,$fullname);
}
elsif (-f $fullname)
{
push(@files,$fullname);
}
else
{
print "What?: $fullname\n";
}
}
}
Breaking out or "short circuiting" a loop
#
## break out of a loop
#
open(PS,"/bin/ps -ef |");
while ($procline = <PS>)
{
if ($procline =~ m#httpd#) # find a webserver
{
($junk,$user,$pid,$ppid) = split (/\s+/,$procline); # split the line on whitespace
last; # jump out of the while loop
}
}
close(PS);
Determining The PID of a Child Process
#
## determining the PID of a child process
#
$childpid = open(PS,"/bin/ps -ef |");
get the loginID
#
## get the loginID
#
$user = (getpwuid($<))[0];
get the hostname
#
## get the hostname
#
use Sys::Hostname;
$host = hostname();
concatenate the elements of an array, separated by $delimiter
#
## concatenate the elements of an array, separated by $delimiter
#
$list = join($delimiter,@groups);
Working with references to a hash
#
## concatenate the elements of an array, separated by $delimiter
#
my (%mainhash);
# pass the reference to mainhash by putting the "\" (slash) in front
update(\%mainhash);
printit(\%mainhash);
sub update
{
($hash) = @_;
#
# #update the "referenced" hash by using $$
#
$$hash{"a"} = 1;
$$hash{"b"} = 2;
$$hash{"c"} = 3;
$$hash{"d"} = 4;
}
sub printit
{
($hash) = @_;
#
## "keys" cannot work with the reference $$hash so use %{$hash}
#
foreach $key (keys %{$hash})
{
print "$key\n";
}
}
print using a "here" document
#
## print using a "here" document -- print out html code without lots of quoting games
## variables between <<End_Text; and End_Text will be expanded
## note that End_Text MUST start in the first column
#
print <<End_Text;
<SCRIPT LANGUAGE=JAVASCRIPT>
<!--
document.write('<img src="/cgi-bin/get-img.cgi?'+document.referrer+'"alt="logo" height=103 width=419>')
// -->
</script>
<NOSCRIPT>
<img src="/cgi-bin/get-img.cgi?noscript" alt="logo" height=103 width=419>
</NOSCRIPT>
End_Text
parse script arguments -- either from the command line or as a cgi script
#
## parse script arguments -- either from the command line or as a cgi script
## Note: Arguments are passed to a cgi script in an environment variable
## named QUERY_STRING. These arguments are usually in the form of
## name=value pairs separated by an ampersand (&)
## CGI: test.pl?one=1&two=2
## Command Line: test.pl one=1 two=2
## If the QUERY_STRING variable does not exist, then we can assume the script
## is running from the command line (it might be running as a CGI with no
## inputs, but then there will be no command line inputs either)
## If the script is running from the command line, add the command line arguments
## to the QUERY_STRING environment variable.
## This simplifies argument handling -- the same routine can then be used to parse
## the arguments whether they come form the command line or from a web server.
## This routine stores the name-value pairs in a hash named inputs
##
## THIS DOES NOT CHECK FOR BAD OR DANGEROUS CHARACTERS SUCH AS SHELL ESCAPES!!!!!
#
# command line inputs
if ($ENV{QUERY_STRING} eq "")
{
$ENV{QUERY_STRING} = join("&",@ARGV);
$ENV{REQUEST_METHOD} = "GET";
# set a "default" value
$inputs{file} = "../data.htm";
}
# cgi-script
if ($ENV{REQUEST_METHOD} eq 'GET')
{
# split the query into keywords
foreach $input (split("&",$ENV{QUERY_STRING}))
{
if ($input =~ /(.*)=(.*)/)
{
($key,$value) = ($1, $2);
if ($debug) { print "[$key] [$value]<br>\n"; }
# replace "+" with " "
$value =~ s/\+/ /g ;
# convert hex characters
$value =~ s/%(..)/pack('c',hex($1))/eg;
# add keyword/value pair to a list
$inputs{$key} = $value;
}
}
}