home | changes | index | login

Perl Code

WareLogging. Some bits of PerlLanguage. Also look at PerlCompatibleRegularExpressions.

= one-liners and the like =

$/ = "\n"; # record separator

$re = qr/whatever/; # store a RegEx

# ridiculous (shouldn't cut or basename do this?), but... # in your shell - count uniquely named jpgs: find . -iname '.jpg' | perl -n -e 's{./(.*$)}{$1}; print'| sort | uniq | wc -l

# 'course, find can do the filename trimming by itself: find . -iname '*.jpg' -printf '%f\n'|sort|uniq|wc -l

= return a date-based directory name =

(Edit this page to see brackets in the proper spot, until I fix the crappy markup around here.)

#!/usr/bin/perl use POSIX qw(strftime); my @t = localtime; my $dir = strftime( "%Y/%m/%e", @t ); $dir =~ s/\/0 /\//g; print $dir;

= dispatch table to package subs =

package Whatever::Thing;

my %tags = ( p => \&tag, em => \&tag, small => \&tag, strong => \&tag, table => \&tag, );

# Install appropriate subs in symbol table: for my $key (keys %tags) { *$key = sub { $tags{$key}->($key, @_) }; }

sub tag { my ($tag, $text, $class) = @_;

if (defined $class) { return qq{<$tag class="$class">$text</$tag>}; } else { return qq{<$tag>$text</$tag>}; } }

# should give you '<p class="item"><strong>Some stuff.</strong></p>' print p(strong('Some stuff'), 'item');

= print every so many lines =

#!/usr/bin/perl

@lines = <STDIN>;

$start = 0; # array index not line - first line is 0 $skip = 7; $count = $skip;

for ( @lines[$start .. $#lines] ) { print if ( $count % $skip == 0 ); $count++; }

= recursive file rename =

This still running in the background on about a gazillion images. Let's hope it doesn't break anything. Yes, next time I will stop being an idiot and use find(1).

#!/usr/bin/perl

use strict; use warnings;

change(".");

sub change { my ($dir) = @_; print "Trying $dir\n";

  my $dh;
  opendir $dh, $dir;
    my @files = readdir $dh;
  closedir $dh;

  for my $file (@files) {
      next if ($file =~ m/^\.\.$/);
      next if ($file =~ m/^\.$/);

      if (-d "$dir/$file") {

          # recursion.
          change("$dir/$file");

      } elsif ($file =~ m/\.jpe?g/i) {
          next if ($file =~ m/\.jpg$/);
          my $new_file = $file;
          $new_file =~ s/\.jpe?g/\.jpg/i;
          rename ("$dir/$file", "$dir/$new_file");
          print "$dir/$file to: $dir/$new_file\n";
      }
  }

}

= grep =

$ perl %ignore = (blah => 1); @wog = qw(blah wog tog dog); @wog = grep { ! $ignore{$_} } @wog; print @wog; wogtogdog

$ perl $n = 100; if ( grep { $n % $_ != 0 } (1..10) ) { print $n; } 100

pick a name (required to comment or edit a page)
last edited December 18, 2007