perl one-liners

102
Perl One Liners for the Shell

Upload: daoswald

Post on 21-Jan-2018

177 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Perl one-liners

Perl One Liners for the Shell

Page 2: Perl one-liners

Dave Oswald

● Conferences Committee Chairman

● Salt Lake Perl Mongers Organizer

● Software Engineer

● Platform & Infrastructure Engineering Manager

Page 3: Perl one-liners
Page 4: Perl one-liners
Page 5: Perl one-liners
Page 6: Perl one-liners

perl [switches] [--] [programfile] [arguments]

Page 7: Perl one-liners

Switches -0[octal] specify record separator (\0, if no argument)

-a autosplit mode with -n or -p (splits $_ into @F)

-C[number/list] enables the listed Unicode features

-c check syntax only (runs BEGIN and CHECK blocks)

-d[:debugger] run program under debugger

-D[number/list] set debugging flags (argument is a bit mask or alphabets)

-e program one line of program (several -e's allowed, omit programfile)

-E program like -e, but enables all optional features

-f don't do $sitelib/sitecustomize.pl at startup

-F/pattern/ split() pattern for -a switch (//'s are optional)

-i[extension] edit <> files in place (makes backup if extension supplied)

-Idirectory specify @INC/#include directory (several -I's allowed)

-l[octal] enable line ending processing, specifies line terminator

-[mM][-]module execute "use/no module..." before executing program

-n assume "while (<>) { ... }" loop around program

-p assume loop like -n but print line also, like sed

-s enable rudimentary parsing for switches after programfile

-S look for programfile using PATH environment variable

-t enable tainting warnings

-T enable tainting checks

-u dump core after parsing program

-U allow unsafe operations

-v print version, patchlevel and license

-V[:variable] print configuration summary (or a single Config.pm variable)

-w enable many useful warnings

-W enable all warnings

-x[directory] ignore text before #!perl line (optionally cd to directory)

-X disable all warnings

Page 8: Perl one-liners
Page 9: Perl one-liners
Page 10: Perl one-liners

perldoc perlrun

Page 11: Perl one-liners

Introducing the tools

Page 12: Perl one-liners

perl -e ''

Page 13: Perl one-liners

-e

Page 14: Perl one-liners

perl -e 'print "Hello World!\n"'

Hello World!

Page 15: Perl one-liners

#!/usr/bin/env perlprint 'Hello World!\n';

Hello World!

Page 16: Perl one-liners

echo 'Hello World'

Page 17: Perl one-liners

while (defined(local $_ = <>)) {

...

print;}

$ perl myscript file1.txt file2.txt

Page 18: Perl one-liners

Internally <> reads from each file in @ARGV, falling back to STDIN.

Page 19: Perl one-liners

A concept in Perl is only valid if it can be expressed as a one-liner.

-- Documentation for Inline::C

Page 20: Perl one-liners

perl -pe '...'

Page 21: Perl one-liners

while (defined(local $_ = <>)) {

...

print;}

$ perl myscript file1.txt file2.txt

Page 22: Perl one-liners

while (defined(local $_ = <>)) { chomp ... $_ .= "\n"; print;}

$ perl myscript file1.txt file2.txt

Page 23: Perl one-liners

perl -lpe '...'

Page 24: Perl one-liners

Reverse the characters in every word in a dictionary

Page 25: Perl one-liners

perl -ple '$_ = reverse' ~/scripts/2of12inf.txt

Page 26: Perl one-liners

Count by fives

Page 27: Perl one-liners

seq 1 10 | perl -lpe '$_ *= 5'

Page 28: Perl one-liners

-l

chomps input, adds newline to output.

Page 29: Perl one-liners

-l

chomps input, adds newline to output.

$/ = $\ = "\n"

Page 30: Perl one-liners

-p

Creates a loop that iterates over lines of input, carries out any actions in the code block, and

prints each line.

Page 31: Perl one-liners

$.

Page 32: Perl one-liners

perl -pe '$_ = "$. " . $_' 2of12inf.txt

Page 33: Perl one-liners

$.

Special variable contains the line number of the most recently read line of input.

Lines start at 1.

Page 34: Perl one-liners

Sometimes printing every line of input is not wanted.

Page 35: Perl one-liners

-n

Page 36: Perl one-liners

perl -ne 'print "$.: $_" if m/^th/' 2of12inf.txt

Page 37: Perl one-liners

Let’s get a count at the end.

Page 38: Perl one-liners

This means we need something to happen only one time, after the loop is done.

Page 39: Perl one-liners

perl -ne 'if (m/^th/) {$c++; print} END{print "$c\n"}'

Page 40: Perl one-liners

grep '^th' 2of12inf.txt |wc -l

Page 41: Perl one-liners

-n iterates over lines of a file without printing.

You can print explicitly.

Page 42: Perl one-liners

-n is useful as a filter similar to GNU grep.

Page 43: Perl one-liners

END{ ... }

Can be used to defer an action to after the iterating is done.

Page 44: Perl one-liners

Input can come from STDIN rather than a file.This allows pipes to work.

Page 45: Perl one-liners

seq 1 10 |perl -ne '$_*=5; print "$_\n" if $_ % 3 == 0'

Page 46: Perl one-liners

perl -l0pe '...' filename

Page 47: Perl one-liners

-l0

Specify an octal ASCII value as input/output record separator.

Page 48: Perl one-liners

-0

Set output record separator to octal value

Page 49: Perl one-liners

-0oct and -loct

Useful for working with null-terminated lines or input.

Page 50: Perl one-liners

-a

Page 51: Perl one-liners

df |perl -ane 'next if $. == 1; print "$F[-1] $F[-2]\n"'

Page 52: Perl one-liners

-a

Auto-split each line on whitespace into @F

Page 53: Perl one-liners

Let’s split on comma and change to colon

Page 54: Perl one-liners

-F/pattern/

Page 55: Perl one-liners

perl -F/,/ -ne '$"=":"; print "@F";' csv

Page 56: Perl one-liners

-F/pattern/

Specifies an alternate split pattern.

Page 57: Perl one-liners

$" = "..."

Specifies an alternate “join” delimiter when an array is interpolated into a string.

Page 58: Perl one-liners

perl -pe 'tr/,/:/' csv

Page 59: Perl one-liners

-i

Page 60: Perl one-liners

perl -i.bak -pe 'tr/,/:/' csv

Page 61: Perl one-liners

-i

In-place edit a file.

Optionally create a backup of original.

Page 62: Perl one-liners

perl -i.bak -pe 'tr/:/,/' csv

Page 63: Perl one-liners

Fixed.

Page 64: Perl one-liners
Page 65: Perl one-liners

Handling multiple files distinctly

Page 66: Perl one-liners

eof

Page 67: Perl one-liners

perl -ne 'print; print "EOF\n" if eof' 2of12inf.txt

Page 68: Perl one-liners

Use eof to detect end of input files.

Page 69: Perl one-liners

-M

Page 70: Perl one-liners

Load a module at startup

Page 71: Perl one-liners

seq 1 10 |perl -MList::Util=shuffle -ne 'push @S, $_; END{print for

shuffle @S}'

Page 72: Perl one-liners

seq 1 10 |perl -MList::Util=shuffle -ne\

'push @S, $_; END{print for shuffle @S}'

Page 73: Perl one-liners

-M

Loads a module at startup.

Optionally specify an import list.

Page 74: Perl one-liners

May invoke -M more than once.

Page 75: Perl one-liners

perl -Mstrict -Mwarnings -e '$foo=10'

(Strict violation)

Page 76: Perl one-liners

What modules are loaded when I loadData::Dumper?

Page 77: Perl one-liners

perl -MData::Dumper -e 'print "$_\n" for keys %INC'

Page 78: Perl one-liners

Where is Perl finding Data::Dumper?

Page 79: Perl one-liners

perl -MData::Dumper -e 'print qq/$INC{"Data/Dumper.pm"}\n/'

Page 80: Perl one-liners

qq/.../

Same as "..."

Used to specify an alternate quoting mechanism

Page 81: Perl one-liners

q/.../ '...'qq/.../ '...'qr/.../ m/.../qx/.../ `...`

Page 82: Perl one-liners

q{...} '...'qq{...} '...'qr{...} m/.../qx{...} `...`

Page 83: Perl one-liners

%INC

Hash containing list of modules loaded, and their file paths.

Page 84: Perl one-liners

-E

Page 85: Perl one-liners

perl -MData::Dumper -E 'say $INC{"Data/Dumper.pm"}'

Page 86: Perl one-liners

-E

Allow use of say keyword.

say is like print, but auto-appends newline.

Page 87: Perl one-liners

-E

Also enables all feature keywords for the Perl version in use.

Page 88: Perl one-liners

-I

Page 89: Perl one-liners

perl -I/path/to/lib -MGreet -E 'say greet()'

Page 90: Perl one-liners

perl -I./lib -E 'say for @INC';

Page 91: Perl one-liners

-I

Specify the first path to search for a module.

Multiple -I switches are fine.

Page 92: Perl one-liners

-V

Page 93: Perl one-liners

perl -V

Page 94: Perl one-liners

perl -V:u64type

Page 95: Perl one-liners

perl -MConfig -E 'say $Config{u64type}'

Page 96: Perl one-liners

Find all mentions of a feature in Perl POD "*delta.pod" articles for current version of Perl.

Page 97: Perl one-liners

How do I know when feature X was added to Perl?

Page 98: Perl one-liners

How do I know when feature X was added to Perl?

grep -ri 'signatures' $(find $(perl -E 'say for @INC') -name '*delta.pod')

Page 99: Perl one-liners

Perl's documentation

Page 100: Perl one-liners

Perl's documentation

● perlrun– Explanation of all command-line switches.

● perlvar– Explanation of Perl's "special variables"

● perlsyn– Description of syntax

Page 101: Perl one-liners

Perl is part of Linux's rich set of tools.

Page 102: Perl one-liners

[email protected]

Slides available on Slideshare