Things I always need to look up in Perl

Here are some random Perl things I always need to look up:

Print the string representation in hex

print join( ’ ', map { unpack “H*”, $_ } split( //, $x ) );

Text replacement on a per-file basis

perl -pi -e 's/\/business\//\/illus\/business.html/' */*.html
  • -p : Iterate over each line of the file
  • -i : Don’t create a backup file
  • -e : Enter one or more lines of script

Muliple line pattern modifiers:

  • /s allows wildcards (.) to match a newline. Use this to extend a search beyond a single line.

  • /m changes the behavior of ^ and $ so they will match the start and end of any line. /^<h4>/m would match any line that began with an h4 heading tag.

  • To explicitly match the start and end of the string, use \A and the EOF character, \z.

  • The /s and /m modifiers are not mutually exclusive.

The break and continue keywords from C are last and next in Perl.

Use localtime to get the current year (assuming post-2000):

# Year is the sixth element of the localtime list
$YEAR = 2000 + (( localtime )[5] % 100);

Redirecting STDOUT temporarily to a scalar (string)

# Open a filehandle on a string
my $scalar_file = '';
open my $scalar_fh, '>', \$scalar_file
		or die "Can't open scalar filehandle: $!";

# Select scalar filehandle as default, save STDOUT
my $ostdout = select( $scalar_fh );

# Unbuffered output
$| = 1;

# Now, close scalar filehandle and bring back STDOUT
close( $scalar_fh );

print "ABC\n";
print "DEF\n";
print "GHI...\n";

# Bring STDOUT back
select( $ostdout );

Slurp an entire file into a scalar

open my $text_fh, '<', 'myfile.txt' or die $!;
my $contents = do { local $/;  <$text_fh> };

Run a function inside of a double-quoted string

my $input = qq|<input type="text" name="email"
	value="<b>${ \escapeHTML( $email ) }</b>">|;

Use Data::Dumper to display a data structure

use Data::Dumper;
warn "KAC:", Data::Dumper->Dump( [$data_structure], ['*main::data_structure'] );