Recently, I have been moving Perl scripts from BSD and Linux machines onto OS X. Mostly, things are pretty smooth but today I had to change a script slightly so that I could read data from /private/var/tmp/ on OS X. The scripts I had on the other systems would read from /var/tmp/, on OS X there is a symlink to /private/var in the root partition, but it seemed to me that relying on the existence of symlinks is not a particularly good idea. Especially if I would need to move the scripts onto another system in the future.

I searched around my trusty Perl documentation and of course, online at and I found I could use a special variable that contains the operating system name. Here's what I came up with:

my $infile = $ARGV[0];my $os     = $^O;          # woohoo there's a special variable I can use for thisget_xmlpath();sub get_xmlpath{  if ( $os eq "darwin" )  {    $xmlpath  = '/private/var/tmp/xml-data/';  }  else  {     $xmlpath  = '/var/tmp/xml-data/';  } $infile = "$xmlpath$infile.xml";print "Using XML file: " . $infile . "\n";return ($infile);}

Could it be done using less lines? Of course, but then I think Perl Golf is just plain dumb. Disclaimer: this will not work on Win32, fortunately I never have to use Perl on Win32.