essential perl one-liners

92
One-Liners 101 Advanced Perl One-Liners Summary Examples Essential Perl One-Liners Walter C. Mankowski Department of Computer Science Drexel University Philadelphia, PA YAPC::NA Columbus June 23, 2010 Walt Mankowski Essential Perl One-Liners

Upload: michael-dingler

Post on 03-Apr-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 1/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Essential Perl One-Liners

Walter C. Mankowski

Department of Computer Science

Drexel University

Philadelphia, PA

YAPC::NA ColumbusJune 23, 2010

Walt Mankowski Essential Perl One-Liners

Page 2: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 2/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Why One-Liners?

Perl’s got a reputation for producing unreadable,unmaintainable code.

Walt Mankowski Essential Perl One-Liners

Page 3: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 3/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Why One-Liners?

Perl’s got a reputation for producing unreadable,unmaintainable code.

A lot of work has been done on tools and techniques to getaround that.

Walt Mankowski Essential Perl One-Liners

Page 4: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 4/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Why One-Liners?

Perl’s got a reputation for producing unreadable,unmaintainable code.

A lot of work has been done on tools and techniques to getaround that.

Perl’s still great for throwing together quick and dirty littleprograms.

Walt Mankowski Essential Perl One-Liners

O Li 101

Page 5: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 5/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Why One-Liners?

Perl’s got a reputation for producing unreadable,unmaintainable code.

A lot of work has been done on tools and techniques to getaround that.

Perl’s still great for throwing together quick and dirty littleprograms.

Nothing’s quicker and dirtier than the one-liner.

Walt Mankowski Essential Perl One-Liners

O Li 101

Page 6: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 6/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

But I’m a Java programmer!

Walt Mankowski Essential Perl One-Liners

One Liners 101

Page 7: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 7/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

But I’m a Java programmer!

Text files are everywhere .

Walt Mankowski Essential Perl One-Liners

One Liners 101

Page 8: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 8/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

But I’m a Java programmer!

Text files are everywhere .

The Unix command-line environment is incredibly powerful:

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Page 9: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 9/92

One-Liners 101Advanced Perl One-Liners

SummaryExamples

But I’m a Java programmer!

Text files are everywhere .

The Unix command-line environment is incredibly powerful:everything is ASCII

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Page 10: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 10/92

One Liners 101Advanced Perl One-Liners

SummaryExamples

But I’m a Java programmer!

Text files are everywhere .

The Unix command-line environment is incredibly powerful:everything is ASCIIcreate new “programs” by connecting small, simple existingprograms in pipelines

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Page 11: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 11/92

Advanced Perl One-LinersSummaryExamples

But I’m a Java programmer!

Text files are everywhere .

The Unix command-line environment is incredibly powerful:everything is ASCIIcreate new “programs” by connecting small, simple existingprograms in pipelinesless, wc, sort, xargs, sed, tr, cut, tee, etc.

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Page 12: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 12/92

Advanced Perl One-LinersSummaryExamples

But I’m a Java programmer!

Text files are everywhere .

The Unix command-line environment is incredibly powerful:everything is ASCIIcreate new “programs” by connecting small, simple existingprograms in pipelinesless, wc, sort, xargs, sed, tr, cut, tee, etc.

Perl fits really well into this niche.

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Page 13: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 13/92

Advanced Perl One-LinersSummaryExamples

Freeing your time for more important things . . .

Walt Mankowski Essential Perl One-Liners

One-Liners 101O

Page 14: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 14/92

Advanced Perl One-LinersSummaryExamples

Freeing your time for more important things . . .

Walt Mankowski Essential Perl One-Liners

One-Liners 101Ad d P l O Li

Hello, world

Page 15: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 15/92

Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Perl One-Liners 101

Walt Mankowski Essential Perl One-Liners

One-Liners 101Ad d P l O Li

Hello, world

Page 16: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 16/92

Advanced Perl One-LinersSummaryExamples

,NewlinesLoops

Perl One-Liners 101(Cell phones off?)

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One Liners

Hello, world

Page 17: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 17/92

Advanced Perl One-LinersSummaryExamples

NewlinesLoops

Hello, world

% perl -e ’print "Hello, world.\n"’

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Hello, world

Page 18: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 18/92

Advanced Perl One-LinersSummaryExamples

NewlinesLoops

Hello, world

% perl -e ’print "Hello, world.\n"’

Hello, world.

%

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Hello, worldN li

Page 19: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 19/92

Advanced Perl One LinersSummaryExamples

NewlinesLoops

Hello, world

% perl -e ’print "Hello, world.\n"’

Hello, world.

%

-e to enter the program on the command line

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Hello, worldN li

Page 20: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 20/92

Advanced Perl One LinersSummaryExamples

NewlinesLoops

Hello, world

% perl -e ’print "Hello, world.\n"’

Hello, world.

%

-e to enter the program on the command line

enclose program in single quotes to avoid shell expansion(double quotes on Windows)

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Hello, worldNewlines

Page 21: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 21/92

SummaryExamples

NewlinesLoops

Hello, world

% perl -e ’print "Hello, world.\n"’

Hello, world.

%

-e to enter the program on the command line

enclose program in single quotes to avoid shell expansion(double quotes on Windows)

you don’t need the final semicolon

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Hello, worldNewlines

Page 22: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 22/92

SummaryExamples

NewlinesLoops

Hello, world

% perl -e ’print "Hello, world.\n"’

Hello, world.

%

-e to enter the program on the command line

enclose program in single quotes to avoid shell expansion(double quotes on Windows)

you don’t need the final semicolonno strict

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Hello, worldNewlines

Page 23: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 23/92

SummaryExamples

NewlinesLoops

Hello, world

% perl -e ’print "Hello, world.\n"’

Hello, world.

%

-e to enter the program on the command line

enclose program in single quotes to avoid shell expansion(double quotes on Windows)

you don’t need the final semicolon

no strict

no warnings

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

S

Hello, worldNewlines

Page 24: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 24/92

SummaryExamples

NewlinesLoops

Hello, world

% perl -e ’print "Hello, world.\n"’

Hello, world.

%

-e to enter the program on the command line

enclose program in single quotes to avoid shell expansion(double quotes on Windows)

you don’t need the final semicolon

no strict

no warnings

no tests

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

S

Hello, worldNewlines

Page 25: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 25/92

SummaryExamples

Loops

That’s it!

That’s all you need to know.

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Summary

Hello, worldNewlines

Page 26: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 26/92

SummaryExamples

Loops

That’s it!

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Summary

Hello, worldNewlines

Page 27: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 27/92

SummaryExamples

Loops

That’s it!

That’s all you need to know.

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Summary

Hello, worldNewlines

Page 28: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 28/92

SummaryExamples

Loops

That’s it!

That’s all you need to know.The rest of this talk is all about syntactic sugar to makeone-liners easier to write.

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Summary

Hello, worldNewlinesL

Page 29: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 29/92

SummaryExamples

Loops

Perl programmers love syntactic sugar

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Summary

Hello, worldNewlinesL

Page 30: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 30/92

yExamples

Loops

Perl programmers love syntactic sugar

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Summary

Hello, worldNewlinesLoops

Page 31: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 31/92

yExamples

Loops

Automatic newlines with -l

The -l flag automatically adds a newline to whatever you print.

Without -l

perl -e ’print "Hello, world.\n"’

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

Summary

Hello, worldNewlinesLoops

Page 32: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 32/92

ExamplesLoops

Automatic newlines with -l

The -l flag automatically adds a newline to whatever you print.

Without -l

perl -e ’print "Hello, world.\n"’

With -l

perl -le ’print "Hello, world."’

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryE l

Hello, worldNewlinesLoops

Page 33: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 33/92

ExamplesLoops

say what?

Perl 5.10 introduced a new builtin function, say, that works justlike print except that it automatically adds a newline.

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryE l

Hello, worldNewlinesLoops

Page 34: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 34/92

ExamplesLoops

say what?

Perl 5.10 introduced a new builtin function, say, that works justlike print except that it automatically adds a newline.Sadly, say doesn’t work with -e:

% perl -e ’say "Hello, world."’String found where operator expected at -e line 1, near

"say "Hello, world.""

(Do you need to predeclare say?)

syntax error at -e line 1, near "say "Hello, world.""

Execution of -e aborted due to compilation errors.

%

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryE amples

Hello, worldNewlinesLoops

Page 35: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 35/92

Examplesp

say what? (continued)

To avoid breaking backward compatibility, say is turned off bydefault in 5.10.

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 36: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 36/92

Examples

say what? (continued)

To avoid breaking backward compatibility, say is turned off bydefault in 5.10.

To turn it on from the command line, use -E instead of  -e:

% perl -E ’say "Hello, world."’

Hello, world.

%

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 37: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 37/92

Examples

Writing Loops

Suppose you want to see if your team is following your new coding

standards that lines can’t be longer than 80 characters. Here’s oneway to write that:

perl -e ’while (<>) {print if length > 80}’ *.pl

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 38: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 38/92

Examples

The -n flag

That gets tedious to write that all the time, so perl has a -n flagthat automatically puts a loop around your code. It’s equivalent to

while {<>} {

... # your code goes here

}

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 39: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 39/92

a p es

The -n flag

That gets tedious to write that all the time, so perl has a -n flagthat automatically puts a loop around your code. It’s equivalent to

while {<>} {

... # your code goes here

}

Without -n

perl -e ’while (<>) {print if length > 80}’ *.pl

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 40: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 40/92

p

The -n flag

That gets tedious to write that all the time, so perl has a -n flagthat automatically puts a loop around your code. It’s equivalent to

while {<>} {

... # your code goes here

}

Without -n

perl -e ’while (<>) {print if length > 80}’ *.pl

With -n

perl -ne ’print if length > 80’ *.pl

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 41: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 41/92

BEGIN and END blocks

If you want to do pre- or post-processing when using the -n flag,use BEGIN and END blocks.

For example, if the filenums

contains1

2

3

4

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 42: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 42/92

BEGIN and END blocks (continued)

Sum

% perl -lne ’$s += $_; END{print $s}’ nums

10

%

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 43: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 43/92

BEGIN and END blocks (continued)

Sum

% perl -lne ’$s += $_; END{print $s}’ nums

10

%

Product

% perl -lne ’BEGIN{$p = 1} $p *= $_; END{print $p}’ \

nums

24

%

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 44: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 44/92

Writing Loops (continued)

Suppose you want to convert an existing file to lowercase. Nowthat you know about the -n flag, you might try writing it like this:

perl -ne ’tr/A-Z/a-z/; print’ foo

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 45: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 45/92

Writing Loops (continued)

Suppose you want to convert an existing file to lowercase. Nowthat you know about the -n flag, you might try writing it like this:

perl -ne ’tr/A-Z/a-z/; print’ foo

perl -ne ’tr/A-Z/a-z/; print’ foo >foo.out

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-LinersSummaryExamples

Hello, worldNewlinesLoops

Page 46: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 46/92

The -p flag

Printing each line is a common enough operation that perl has aspecial flag for it, the -p flag. It’s equivalent to

while {<>} {

... # your code goes here

} continue {

print or die "-p destination: $!\n";}

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Hello, worldNewlinesLoops

Page 47: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 47/92

The -p flag

Printing each line is a common enough operation that perl has aspecial flag for it, the -p flag. It’s equivalent to

while {<>} {

... # your code goes here

} continue {

print or die "-p destination: $!\n";}

It’s similar to the -n flag, except -p prints out each line:

Without -p

perl -ne ’tr/A-Z/a-z/; print’ foo

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Hello, worldNewlinesLoops

Page 48: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 48/92

The -p flag

Printing each line is a common enough operation that perl has aspecial flag for it, the -p flag. It’s equivalent to

while {<>} {

... # your code goes here

} continue {

print or die "-p destination: $!\n";}

It’s similar to the -n flag, except -p prints out each line:

Without -p

perl -ne ’tr/A-Z/a-z/; print’ foo

With -p

perl -pe ’tr/A-Z/a-z/’ foo

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Editing files in-placeAutosplitUsing modulesInput record separators

Page 49: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 49/92

Advanced Perl One-Liners

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Editing files in-placeAutosplitUsing modulesInput record separators

Page 50: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 50/92

Editing files “in-place”

Instead of just printing out the file, one thing you might want todo with the -p flag is make the changes directly to the file. Perl’s-i flag does exactly that:

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Editing files in-placeAutosplitUsing modulesInput record separators

fi

Page 51: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 51/92

Editing files “in-place”

Instead of just printing out the file, one thing you might want todo with the -p flag is make the changes directly to the file. Perl’s-i flag does exactly that:

Print to stdout

perl -pe ’s/foo/bar/’ a.pl

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Editing files in-placeAutosplitUsing modulesInput record separators

Edi i fil “i l ”

Page 52: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 52/92

Editing files “in-place”

Instead of just printing out the file, one thing you might want todo with the -p flag is make the changes directly to the file. Perl’s-i flag does exactly that:

Print to stdout

perl -pe ’s/foo/bar/’ a.pl

Edit a.pl “in-place”

perl -pi -e ’s/foo/bar/’ a.pl

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Editing files in-placeAutosplitUsing modulesInput record separators

Edi i fil “i l ”

Page 53: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 53/92

Editing files “in-place”

Instead of just printing out the file, one thing you might want todo with the -p flag is make the changes directly to the file. Perl’s-i flag does exactly that:

Print to stdout

perl -pe ’s/foo/bar/’ a.pl

Edit a.pl “in-place”

perl -pi -e ’s/foo/bar/’ a.pl

Editing multiple files

perl -pi -e ’s/foo/bar/’ *.pl

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Editing files in-placeAutosplitUsing modulesInput record separators

Editi fil “i l ”

Page 54: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 54/92

Editing files “in-place”

Obviously the -i flag is dangerous since it clobbers whatever wasoriginally in the file. So Perl lets you specify a backup file whenusing -i.

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Editing files in-placeAutosplitUsing modulesInput record separators

Editi fil “i l ”

Page 55: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 55/92

Editing files “in-place”

Obviously the -i flag is dangerous since it clobbers whatever wasoriginally in the file. So Perl lets you specify a backup file whenusing -i.

Edit a.pl “in-place”

perl -pi -e ’s/foo/bar/’ a.pl

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Editi fil s “i l ”

Page 56: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 56/92

Editing files in-place

Obviously the -i flag is dangerous since it clobbers whatever wasoriginally in the file. So Perl lets you specify a backup file whenusing -i.

Edit a.pl “in-place”

perl -pi -e ’s/foo/bar/’ a.pl

Original file saved in a.pl.bak

perl -p -i.bak -e ’s/foo/bar/’ a.pl

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Automatically splitting files

Page 57: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 57/92

Automatically splitting files

Use the -a flag to automatically split each line (like AWK).Default is to split on ’ ’; use the -F flag to split on something else.

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Automatically splitting files

Page 58: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 58/92

Automatically splitting files

Use the -a flag to automatically split each line (like AWK).Default is to split on ’ ’; use the -F flag to split on something else.

Print processes whose parents are initps axl | perl -ane ’print if $F[3] == 1’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Automatically splitting files

Page 59: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 59/92

Automatically splitting files

Use the -a flag to automatically split each line (like AWK).Default is to split on ’ ’; use the -F flag to split on something else.

Print processes whose parents are initps axl | perl -ane ’print if $F[3] == 1’

Print all userids and user names

perl -aln -F: -e ’print "$F[2]\t$F[0]"’ /etc/passwd

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Using modules

Page 60: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 60/92

Using modules

Instead of explicitly use’ing a module, you can load a module fromthe command line with the -M flag.The following programs both do the same thing:

Use module

perl -e ’use LWP::Simple; getprint "http://pghpw.org"’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Using modules

Page 61: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 61/92

Using modules

Instead of explicitly use’ing a module, you can load a module fromthe command line with the -M flag.The following programs both do the same thing:

Use module

perl -e ’use LWP::Simple; getprint "http://pghpw.org"’

-M flag

perl -MLWP::Simple -e ’getprint "http://pghpw.org"’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Using modules

Page 62: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 62/92

Using modules

That’s still kind of ugly. One trick to simply it further is to putmodules you commonly use in one-liners into y.pm:

y.pm

use LWP::Simple;

1;

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Using modules

Page 63: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 63/92

Using modules

That’s still kind of ugly. One trick to simply it further is to putmodules you commonly use in one-liners into y.pm:

y.pm

use LWP::Simple;

1;

Now instead of this:

perl -MLWP::Simple -e ’getprint "http://pghpw.org"’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Using modules

Page 64: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 64/92

Using modules

That’s still kind of ugly. One trick to simply it further is to putmodules you commonly use in one-liners into y.pm:

y.pm

use LWP::Simple;

1;

Now instead of this:

perl -MLWP::Simple -e ’getprint "http://pghpw.org"’

you can write this:

perl -My -e ’getprint "http://pghpw.org"’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Input record separators

Page 65: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 65/92

Input record separators

Perl normally reads input until it hits the “input record separator”,which defaults to \n and can be changed by setting $/.But in addition to setting $/ in a BEGIN block, you can also

change it on the command line with the -0 flag. It sets $/ to anoctal or hex number:

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Input record separators

Page 66: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 66/92

p p

Perl normally reads input until it hits the “input record separator”,which defaults to \n and can be changed by setting $/.But in addition to setting $/ in a BEGIN block, you can also

change it on the command line with the-0

flag. It sets$/

to anoctal or hex number:

-0x0d carriage returns

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Input record separators

Page 67: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 67/92

p p

Perl normally reads input until it hits the “input record separator”,which defaults to \n and can be changed by setting $/.But in addition to setting $/ in a BEGIN block, you can also

change it on the command line with the-0

flag. It sets$/

to anoctal or hex number:

-0x0d carriage returns-0 null character (find -print0)

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Input record separators

Page 68: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 68/92

p p

Perl normally reads input until it hits the “input record separator”,which defaults to \n and can be changed by setting $/.But in addition to setting $/ in a BEGIN block, you can alsochange it on the command line with the -0 flag. It sets $/ to anoctal or hex number:

-0x0d carriage returns-0 null character (find -print0)

-00 paragraph mode (useful for Postfix logs)

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Editing files in-place

AutosplitUsing modulesInput record separators

Input record separators

Page 69: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 69/92

p p

Perl normally reads input until it hits the “input record separator”,which defaults to \n and can be changed by setting $/.But in addition to setting $/ in a BEGIN block, you can alsochange it on the command line with the -0 flag. It sets $/ to anoctal or hex number:

-0x0d carriage returns-0 null character (find -print0)

-00 paragraph mode (useful for Postfix logs)-0777 slurp in entire file

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Summary of flags

Page 70: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 70/92

Flag Result

-e Execute program on command line-l Automatically add newlines

-n Automatically loop-p Automatically loop and print each line-i Edit files in-place-a Automatically split input-M Use module

-0 Change input record separator

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

More Information

Page 71: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 71/92

perl -h

print summary of  perl’s command-line options

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

More Information

Page 72: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 72/92

perl -h

print summary of  perl’s command-line options

perldoc perlrun

many more features than I covered

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

More Information

Page 73: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 73/92

perl -h

print summary of  perl’s command-line options

perldoc perlrun

many more features than I coveredGoogle for “perl one liners”

Tom Christiansen one-linersarticle by Jeff Bay in The Perl Review 

“One-liners 101” on IBM developerWorks

@perloneliner on Twittermany others

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Java doesn’t have one-liners

Page 74: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 74/92

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Page 75: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 75/92

Examples!

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Palindromes

Page 76: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 76/92

Find palindromes

perl -lne ’print if $_ eq reverse’ \

/usr/share/dict/words

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Line Numbers

Page 77: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 77/92

Print lines preceded by line number

perl -ne ’print "$. $_"’

$. is a special Perl variable that contains the input line number.

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Line Numbers

Page 78: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 78/92

Print lines preceded by line number

perl -ne ’print "$. $_"’

$. is a special Perl variable that contains the input line number.

Simpler way to do it. . .

cat -n

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Computing Averages

Page 79: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 79/92

Sum lines, then divide by total number of lines

% perl -lne ’$s += $_; END{print $s/$.}’ nums2.5

%

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Printing selected lines

Page 80: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 80/92

Print lines 10–20

perl -ne ’print if 10..20’

The .. operator is magic when used in scalar context. Read the“Range Operators” section in perlop.

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Grep with Perl regular expressions

Page 81: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 81/92

Poor man’s grepperl -ne ’print if /^foobar/’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Grep with Perl regular expressions

Page 82: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 82/92

Poor man’s grepperl -ne ’print if /^foobar/’

. . . but with the full power of Perl’s regular expressions!

Lines with foo not followed by bar

perl -ne ’print if /foo(?!bar)/’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Grep with Perl regular expressions

Page 83: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 83/92

Poor man’s grepperl -ne ’print if /^foobar/’

. . . but with the full power of Perl’s regular expressions!

Lines with foo not followed by bar

perl -ne ’print if /foo(?!bar)/’

Lines with bar not preceded by foo

perl -ne ’print if /(?<!foo)bar/’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Grep with Perl regular expressions

Page 84: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 84/92

Poor man’s grepperl -ne ’print if /^foobar/’

. . . but with the full power of Perl’s regular expressions!

Lines with foo not followed by bar

perl -ne ’print if /foo(?!bar)/’

Lines with bar not preceded by foo

perl -ne ’print if /(?<!foo)bar/’

Grep on paragraphs

perl -00 -ne ’print if /foo(?!bar)/’

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Random Numbers

Page 85: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 85/92

Does rand() return the same sequence with the same seed on

different platforms?

Walt Mankowski Essential Perl One-Liners

One-Liners 101

Advanced Perl One-LinersSummaryExamples

Random Numbers

Page 86: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 86/92

Does rand() return the same sequence with the same seed on

different platforms?

Look at the first 5

% perl -le ’srand(42); print rand for 1..5’

0.744525000061007

0.3427014787189080.111085282444161

0.422338957988309

0.0811111711783106

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Random Numbers

Page 87: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 87/92

Does rand() return the same sequence with the same seed on

different platforms?

Look at the first 5

% perl -le ’srand(42); print rand for 1..5’

0.744525000061007

0.3427014787189080.111085282444161

0.422338957988309

0.0811111711783106

Try a whole bunch% perl -le ’srand(42); print rand for 1..100_000’ \

| md5sum

ac18d07f40c858bf4b23090177f6a685 -

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Stacking the deck

Page 88: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 88/92

One-liners can also be used in shell scripts

#!/bin/bash

SEED=‘perl -le ’print int rand 0xffffffff’‘

for ((n = 10; n <= 400; n += 10)) do

cmd="./wn_path_seq $n $SEED"

echo $cmd

$cmddone

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Add lines to file

Page 89: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 89/92

Add line to beginning of file

perl -0777 -i -ne ’print "first\n$_"’ test.txt

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Add lines to file

Page 90: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 90/92

Add line to beginning of file

perl -0777 -i -ne ’print "first\n$_"’ test.txt

Same thingperl -0777 -i -pe ’$_= "first\n$_"’ test.txt

Walt Mankowski Essential Perl One-Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Add lines to file

Page 91: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 91/92

Add line to beginning of file

perl -0777 -i -ne ’print "first\n$_"’ test.txt

Same thingperl -0777 -i -pe ’$_= "first\n$_"’ test.txt

Same thing, more obfuscated

perl -0777 -i -pe ’s//first\n/’ test.txt

Walt Mankowski Essential Perl One Liners

One-Liners 101Advanced Perl One-Liners

SummaryExamples

Page 92: Essential Perl One-Liners

7/28/2019 Essential Perl One-Liners

http://slidepdf.com/reader/full/essential-perl-one-liners 92/92

Thank you!

Walt Mankowski Essential Perl One Liners