Perl one-liners
-
Upload
daoswald -
Category
Engineering
-
view
174 -
download
2
Transcript of Perl one-liners
![Page 1: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/1.jpg)
Perl One Liners for the Shell
![Page 2: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/2.jpg)
Dave Oswald
● Conferences Committee Chairman
● Salt Lake Perl Mongers Organizer
● Software Engineer
● Platform & Infrastructure Engineering Manager
![Page 3: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/3.jpg)
![Page 4: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/4.jpg)
![Page 5: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/5.jpg)
![Page 6: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/6.jpg)
perl [switches] [--] [programfile] [arguments]
![Page 7: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/7.jpg)
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](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/8.jpg)
![Page 9: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/9.jpg)
![Page 10: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/10.jpg)
perldoc perlrun
![Page 11: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/11.jpg)
Introducing the tools
![Page 12: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/12.jpg)
perl -e ''
![Page 13: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/13.jpg)
-e
![Page 14: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/14.jpg)
perl -e 'print "Hello World!\n"'
Hello World!
![Page 15: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/15.jpg)
#!/usr/bin/env perlprint 'Hello World!\n';
Hello World!
![Page 16: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/16.jpg)
echo 'Hello World'
![Page 17: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/17.jpg)
while (defined(local $_ = <>)) {
...
print;}
$ perl myscript file1.txt file2.txt
![Page 18: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/18.jpg)
Internally <> reads from each file in @ARGV, falling back to STDIN.
![Page 19: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/19.jpg)
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](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/20.jpg)
perl -pe '...'
![Page 21: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/21.jpg)
while (defined(local $_ = <>)) {
...
print;}
$ perl myscript file1.txt file2.txt
![Page 22: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/22.jpg)
while (defined(local $_ = <>)) { chomp ... $_ .= "\n"; print;}
$ perl myscript file1.txt file2.txt
![Page 23: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/23.jpg)
perl -lpe '...'
![Page 24: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/24.jpg)
Reverse the characters in every word in a dictionary
![Page 25: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/25.jpg)
perl -ple '$_ = reverse' ~/scripts/2of12inf.txt
![Page 26: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/26.jpg)
Count by fives
![Page 27: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/27.jpg)
seq 1 10 | perl -lpe '$_ *= 5'
![Page 28: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/28.jpg)
-l
chomps input, adds newline to output.
![Page 29: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/29.jpg)
-l
chomps input, adds newline to output.
$/ = $\ = "\n"
![Page 30: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/30.jpg)
-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](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/31.jpg)
$.
![Page 32: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/32.jpg)
perl -pe '$_ = "$. " . $_' 2of12inf.txt
![Page 33: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/33.jpg)
$.
Special variable contains the line number of the most recently read line of input.
Lines start at 1.
![Page 34: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/34.jpg)
Sometimes printing every line of input is not wanted.
![Page 35: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/35.jpg)
-n
![Page 36: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/36.jpg)
perl -ne 'print "$.: $_" if m/^th/' 2of12inf.txt
![Page 37: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/37.jpg)
Let’s get a count at the end.
![Page 38: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/38.jpg)
This means we need something to happen only one time, after the loop is done.
![Page 39: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/39.jpg)
perl -ne 'if (m/^th/) {$c++; print} END{print "$c\n"}'
![Page 40: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/40.jpg)
grep '^th' 2of12inf.txt |wc -l
![Page 41: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/41.jpg)
-n iterates over lines of a file without printing.
You can print explicitly.
![Page 42: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/42.jpg)
-n is useful as a filter similar to GNU grep.
![Page 43: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/43.jpg)
END{ ... }
Can be used to defer an action to after the iterating is done.
![Page 44: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/44.jpg)
Input can come from STDIN rather than a file.This allows pipes to work.
![Page 45: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/45.jpg)
seq 1 10 |perl -ne '$_*=5; print "$_\n" if $_ % 3 == 0'
![Page 46: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/46.jpg)
perl -l0pe '...' filename
![Page 47: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/47.jpg)
-l0
Specify an octal ASCII value as input/output record separator.
![Page 48: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/48.jpg)
-0
Set output record separator to octal value
![Page 49: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/49.jpg)
-0oct and -loct
Useful for working with null-terminated lines or input.
![Page 50: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/50.jpg)
-a
![Page 51: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/51.jpg)
df |perl -ane 'next if $. == 1; print "$F[-1] $F[-2]\n"'
![Page 52: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/52.jpg)
-a
Auto-split each line on whitespace into @F
![Page 53: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/53.jpg)
Let’s split on comma and change to colon
![Page 54: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/54.jpg)
-F/pattern/
![Page 55: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/55.jpg)
perl -F/,/ -ne '$"=":"; print "@F";' csv
![Page 56: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/56.jpg)
-F/pattern/
Specifies an alternate split pattern.
![Page 57: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/57.jpg)
$" = "..."
Specifies an alternate “join” delimiter when an array is interpolated into a string.
![Page 58: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/58.jpg)
perl -pe 'tr/,/:/' csv
![Page 59: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/59.jpg)
-i
![Page 60: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/60.jpg)
perl -i.bak -pe 'tr/,/:/' csv
![Page 61: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/61.jpg)
-i
In-place edit a file.
Optionally create a backup of original.
![Page 62: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/62.jpg)
perl -i.bak -pe 'tr/:/,/' csv
![Page 63: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/63.jpg)
Fixed.
![Page 64: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/64.jpg)
![Page 65: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/65.jpg)
Handling multiple files distinctly
![Page 66: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/66.jpg)
eof
![Page 67: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/67.jpg)
perl -ne 'print; print "EOF\n" if eof' 2of12inf.txt
![Page 68: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/68.jpg)
Use eof to detect end of input files.
![Page 69: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/69.jpg)
-M
![Page 70: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/70.jpg)
Load a module at startup
![Page 71: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/71.jpg)
seq 1 10 |perl -MList::Util=shuffle -ne 'push @S, $_; END{print for
shuffle @S}'
![Page 72: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/72.jpg)
seq 1 10 |perl -MList::Util=shuffle -ne\
'push @S, $_; END{print for shuffle @S}'
![Page 73: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/73.jpg)
-M
Loads a module at startup.
Optionally specify an import list.
![Page 74: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/74.jpg)
May invoke -M more than once.
![Page 75: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/75.jpg)
perl -Mstrict -Mwarnings -e '$foo=10'
(Strict violation)
![Page 76: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/76.jpg)
What modules are loaded when I loadData::Dumper?
![Page 77: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/77.jpg)
perl -MData::Dumper -e 'print "$_\n" for keys %INC'
![Page 78: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/78.jpg)
Where is Perl finding Data::Dumper?
![Page 79: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/79.jpg)
perl -MData::Dumper -e 'print qq/$INC{"Data/Dumper.pm"}\n/'
![Page 80: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/80.jpg)
qq/.../
Same as "..."
Used to specify an alternate quoting mechanism
![Page 81: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/81.jpg)
q/.../ '...'qq/.../ '...'qr/.../ m/.../qx/.../ `...`
![Page 82: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/82.jpg)
q{...} '...'qq{...} '...'qr{...} m/.../qx{...} `...`
![Page 83: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/83.jpg)
%INC
Hash containing list of modules loaded, and their file paths.
![Page 84: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/84.jpg)
-E
![Page 85: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/85.jpg)
perl -MData::Dumper -E 'say $INC{"Data/Dumper.pm"}'
![Page 86: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/86.jpg)
-E
Allow use of say keyword.
say is like print, but auto-appends newline.
![Page 87: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/87.jpg)
-E
Also enables all feature keywords for the Perl version in use.
![Page 88: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/88.jpg)
-I
![Page 89: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/89.jpg)
perl -I/path/to/lib -MGreet -E 'say greet()'
![Page 90: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/90.jpg)
perl -I./lib -E 'say for @INC';
![Page 91: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/91.jpg)
-I
Specify the first path to search for a module.
Multiple -I switches are fine.
![Page 92: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/92.jpg)
-V
![Page 93: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/93.jpg)
perl -V
![Page 94: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/94.jpg)
perl -V:u64type
![Page 95: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/95.jpg)
perl -MConfig -E 'say $Config{u64type}'
![Page 96: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/96.jpg)
Find all mentions of a feature in Perl POD "*delta.pod" articles for current version of Perl.
![Page 97: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/97.jpg)
How do I know when feature X was added to Perl?
![Page 98: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/98.jpg)
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](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/99.jpg)
Perl's documentation
![Page 100: Perl one-liners](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/100.jpg)
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](https://reader034.fdocuments.in/reader034/viewer/2022042504/5a64848a7f8b9a8e568b4915/html5/thumbnails/101.jpg)
Perl is part of Linux's rich set of tools.