July 26, 2017

Ten Neat Tricks With Perl

  • May 29, 1999
  • By James Andrews
When I am using a computer to do a job I often think 'I am repeating tasks...time to write a script'. Under Linux there are a number of programming systems for scripts. Below we will look at one of them, Perl. Perl is a full blown programming language, but it's good for making short, quickly written programs like scripts. This is because it has a rich set of features and also a wide range of add-on libraries.

Here are ten one liners in perl, illustrating the kinds of task one would use a script for under linux. All the scripts take some kind of argument after the final ' quote that signals the end of the program.

1. perl -p -i -e 's/this/that/g' filename

Search and replace the string 'this' with the string 'that' in the file filename. You can also say * or *.html or any valid wildcard expression instead of filename. The s/// command uses regular expressions. If you want to alter the 'this' and 'that', it's best to avoid .*?[]{}$^ and other odd characters which act as metacharacters in regular expressions. Or better still look at the perlre documentation page. You can do this by saying perldoc perlre. Perl has extensive online documentation, try perldoc perltoc for a list.

2. perl -e 'for (@ARGV) { rename $_, lc($_) unless -e lc($_); }' *

Rename all the files in the current directory to lower case. The $_ is a sort of 'default' variable which is widely used in Perl.

3. perl -e 'for (@ARGV) { rename $_,$_.'l' unless -e lc($_); }' *

Add an 'l' on the end of every filename in the current directory. That is: .htm => .html. The 'unless -e' statement means 'unless the filename exists'.

4. perl -MLWP::Simple -e 'mirror("http://www.perl.com/" , "perl.html")'

Copy a file across the Web if it is newer than the local copy. You will need to install the "libnet" and "libwww" bundles to make this work. The LWP package comes with a great documentation page'lwpcook' which has lots of examples of other ways to transfer data across the WWW with Perl.

5. perl -p -i -e 's/'

Convert Unix files to DOS files. Unix files have a different end of line character sequence from DOS.

6. perl -e 'if (!fork) {sleep $ARGV[0]*60; print "aaa" ; exit;} exit;' 1

Wait for the number of minutes specified and then beep. Note the use of the fork() to run in the background. Use the linux commnd 'ps' if you want to watch the command running.

7.perl -e 'use Socket; $name =gethostbyaddr(inet_aton($ARGV[0] ),AF_INET); print $name;'

Convert the given domain name or dotted IP number to a hostname. It will convert whatever you throw at it to a sensible and consistent hostname.

8. perl -MTime::Local -e '$y2k=timelocal(0,0,0,1,0,2000); $until=$y2k-time; print "seconds $until to y2k ";'

This finds the number of seconds until the year 2000 is upon us.

9. perl -e '$n=utime ((stat($ARGV[0]))[8,9], @ARGV) ;print $n' aaa t*

Make all files beginning with the letter t have the same time stamp as the file 'aaa'

10. perl -l -e 'open(F,"/usr/dict/english"); $w=join("",sort split(//,$ARGV[0])); print grep {chop;join("",sort split(//,$_)) eq $w} ;' life

Find all anagrams of the word 'life'.

That's our ten neat things! Check out some of the excellent Perl resources that can be found on the Web in the left column!

Sitemap | Contact Us