Perl Tricks, Perl One Liners, Oneliners, PCRE, March 4, 2014

Remember Casey West's Perl Power Tools, PPT::Util

* To make glob work correctly across Windows and Linux, use Win32::AutoGlob, this is perl only code that will work on Linux or Windows

* List where perl is getting its includes, @INC

env -i perl -V

* Equivalent of the strings(1) linux command

perl -nlwe "print for m/\w{3,}/g"

* Perl equivalent to grep(1)

perl -MGlobArgs -ne "/\bwhateverToSearch\b/ & print"

or something a little easier to type

perl -ne "print if /PATTERN/"

* Remove empty directories

perl -MFile::Find -e"finddepth( sub { rmdir }, '.')"

* Remove a directory tree

perl -e 'use File::Path; rmtree("p:/directoryToRemove");'

* Create a directory if it does not exist

perl -e "mkdir($$ARGV[0], 0700) unless(-d $$ARGV[0])" "p:/directoryToMake"

* Check to see if a module is installed, for example File::Spec

perldoc -l File::Spec

* print an array from the command line

Use print join ',', @array

perl -MFile::Spec -e"print join ',', File::Spec->splitter('r:\tools\edt' )"

* Print the arguments from the command line (implement /bin/echo)

perl -e"print join ' ', @ARGV, \"\n\”"

* Print each element of the PATH on a separate line on Windows

path | perl -an -F; -e “print join($/, @F)”
perl -MEnv -e”print join($/, split(/;/, $PATH))"

* Print each element of the PATH on a separate line on Linux

echo $PATH | perl -an -F: -e”print join($/, @F)"

* Using ack-grep like a recursive grep

ack -u -G .gpj FAST

-u -- unrestricted file extensions, all files
-G -- match .gpj in the file name
"FAST" -- match FAST in the files found

* Base64 decode

perl -MMIME::Base64 -ne 'binmode STDOUT; print decode_base64($_)' < ../mailblob.txt >

* Implementing the UNIX touch(1) command

perl -MWin32::Autoglob -e"utime time(), time(), @ARGV" files_to_touch

* Perl Command Line Calculator

Start perl in the debugger with the script "1;", which will return true. You can then type in expressions in the debugger and have them evaluated.

perl -d -e 1

* Perl "say" can be implemented on older versions of Perl with

sub say { print @_, "\n" }

* Installing packages manually

* Go to CPAN find the package
* Over on the right side, near the top, there will be a tar.gz link
* wget the package
* unpack it
* perl Makefile.PL
* make
* make test
* sudo make install

• Initializing a list of variables with a value

$_ = 4 for my ($x, $y, $z)