Variable ($)
$ |
Scalars, e.g. $pi = 3.14159265 # numeric $pet = "Camel"; # string $sign = "I ove my $pet"; # string with variable replacement $cose = 'It cose $100'; # string no variable replacement $cwd = `pwd`; # run the command, generate output as input |
$0 |
contains the name of the running perl script. = $PROGRAM_NAME in shell |
$1~$9 |
Each set of grouping ()'s in a regular expression corresponds to a special variable $1 through $9. E.g. $_ = "Fred, not Barney Rubble"; if ( /([A-Z]{1}[a-z]+)\s+([A-Z]{1}[a-z]+)/ ) { print "$1, $2\n";} # would print Barney, Rubble. Matches with Fred inside $_. This value gets assigned to $1. However, once the searching engine fails to match the whitespace (ie, the comma , ) - the search engine starts its search again one character past its "almost" match. Next, Barney matches the first part of the regexp and gets assigned to $1. |
$_ |
default input and pattern-searching space. |
$` |
|
$& |
|
$’ |
|
$$ |
represents the current process id of the running perl script. = $PID in shell |
$! |
If a system or library call fails, it sets this variable. |
$? |
The status returned by the last pipe close, backtick (`` ) command, successful call to wait() or waitpid(), or from the system() operator. |
$ARGV |
contains the name of the current file when reading from <>. |
$#ARGV |
is the number of command line arguements minus one (so it's really the last index of @ARGV). |
@ |
array with number key, e.g. @arr = ('a','b'); @days{'a','c'} = ('Monday','Wednesday'); |
@ARGV |
is an array containing a list of command line arguments passed to the perl script. $ARGV[0] is the first arguement. $0 = argv[0] in C, $ARGV[1] = argv[2] in C. |
@ENV |
e.g. $ENV{‘HOME’} = home path of user, $ENV{‘PWD’} = current path. |
% |
array with string key |
& |
sub Perl |
* |
struck |
Array
@... list, no difference with 1 dimension array
$var{‘string’} Associative Array, use string as index, we call it ‘hash’.
Operators
(1) Numeric
<, >, ==, <=, >=, !=
<=> Compare returns -1,0,1 depending on whether left side arg is less, equal, or greater
(2) String
lt, gt, eq, le, ge, ne, cmp
(3) Logic
||, or, &&, and, !, not, xor,
(4) Bit
&, |, ~, ^, <<, >>
(5) Assignment
x= e.g. $string x= 5;
.= e.g. $string .= “the end”;
(6) Concatenate & Repetition
x repetition operator, e.g. ‘-‘ x 10; would be '----------'
. concatenate 2 strings together
(7) ++, --
(8) , same as ;
(9) Condition ? value 1 : value 2
Regular Expressions
(1) metacharacters
\ (quote the next metacharacter)
^ (match the beginning of the line), ^..
. (match any character except newline)
$ (match the end of the line before newline), ..$
| (alternation), e.g. a|b, a or b
() (grouping), when match save to a special variable, for later usage.
[] (character class), e.g. [a-z], characters from a to z
(2) Quantifiers
* (match 0 or more times), = {0,}, e.g. x*
+ (match 1 or more times), = {1,}
? (match 1 or 0 times), = {0,1}
{n} (match exactly n times), e.g. {7}, 7 times, {count}
{n,} (match at least n times}, e.g. {7,}, more than 7 times, {min,}
{n,m} (match at least n times but no more than m times)
(3) Escape Sequence
\s space, \S vise versa.
\w word, \W vise versa. E.g. w+
\d digit, \D vise versa.
\t tab
\b boundary
(4) Other
=~ use to match with Res(Regular Expressions)
!~ use to unmatch
..? least match. e.g. *? when match then stop. E.g. *?, +?, ??, {min,max}?
m/../ or /../
Match pattern, m/PATTERN/gimosx. ‘m’ could omit if delimit with / or ?, ? stands for just match once.
Option |
Function |
/i |
ignore uppercase or lowercase |
/m |
make ^ and $ match next \n |
/s |
make . match Carrier Return, and omit $* which not suggest to use |
/x |
omit blank and allow comment in mode |
/o |
compile mode once |
/g |
Search globally |
/cg |
Allow keeping search next after not found in /g mode |
s/../../ or /../../
Replace pattern. Return code is match times, return “” when not match.
Option |
Function |
/e |
Right side treat as expression to calculate |
tr/../../
like s///, but match character by character.
Option |
Function |
/d |
Delete characters which found but not replace |
/s |
Remove duplicated characters |
e.g.
tr/AAA/XYZ/ = tr/A/X/
Control Statement
1) If(){}elsif(){}, while(){}, do .. while
2) {} can not omit.
3) last = ‘break’ in C, next = ‘continue’ in C.
Subroutine
sub <routine name>{}
Function
print, printf, chop, split, exit, keys, values, reverse, sort, length, substr, index, push, pop, shift, unshift, open, close, sysopen, format, die, keys.
File
<> file handler.
Sample
sas_name=`echo $sh_name | perl -pe 's/^\w+?_(\w+)_\w+?$/$1/'`
perl -pe "s/LOAD CLIENT FROM \'//i"