Here are a few tips & tricks which you may find useful when dealing with files/directories in Perl.
Example:
We can use a combination of grep and perl test operators to filter some files out, to match some criteria of ours, like getting only text files.
Output:
To find just the name of the file, without its preceding path, and minus the "dot extension" using File::Basename module is pretty easy. We just pass it the whole path, and a string that specifies what extension we want removed and presto we're done.
Perl Test Operators
Code:
+-------------+------------------------------------+ | Operator | Function | +-------------+------------------------------------+ |-e | Tests if OPERAND exists. | +-------------+------------------------------------+ |-f | Tests if OPERAND is a regular file | | | as opposed to a directory, | | | symbolic link or other type of file| +-------------+------------------------------------+ |-l | Tests if OPERAND is a symbolic link| +-------------+------------------------------------+ |-s | Returns size of OPERAND in bytes | +-------------+------------------------------------+ |-d | Tests if OPERAND is a directory. | +-------------+------------------------------------+ |-T | Tests if OPERAND is a text file. | +-------------+------------------------------------+
Code: Perl
#!/usr/bin/perl
if(-e "/tmp/test.pl")
{
print "File/directory exists.";
}
if(-f "/tmp/test.pl")
{
print "File exists";
}
$size = -s "/tmp/test.pl";
print "Size of /tmp/test.pl is $size bytes";
Filtering Files With Some Characteristics
We can use a combination of grep and perl test operators to filter some files out, to match some criteria of ours, like getting only text files.
Code: Perl
#!/usr/bin/perl
$path = "/tmp/test/";
opendir(DIR, $path);
@arr1 = readdir DIR;
@arr2 = grep{-T "$path$_"} @arr1; #only text files only
@arr3 = grep{!-d "$path$_"} @arr1; #no directories
@arr4 = grep{-s "$path$_" < 2048} @arr1; #less than 2KB
@arr5 = grep{/^a/} @arr1; #filenames starting with 'a'
Finding the basename of a file from its full path-name
Code: Perl
#!/usr/bin/perl
use File::Basename;
$path = "/home/htdocs/go4expert.com/cgi-bin/index.cgi";
$basename = basename($path, ".cgi");
print $basename;
Code:
index