Difference between revisions of "Perl"

From wiki
Jump to navigation Jump to search
Line 65: Line 65:
;$newhashref = {$oldhasref1,$oldhashref3}
;$newhashref = {$oldhasref1,$oldhashref3}
:Merge 2 hashes, works if all keys are unique
:Merge 2 hashes, works if all keys are unique
;arr1 = split(<sep>,$string)
:Split a string in to an array on <sep>
;a = arr1[0]
:First element in arr1
;a = arr1[-1]
:Last element in arr1

Revision as of 10:02, 27 November 2019


Put a ; at the end of each line


If testing for existence of a hash key beware that all intermediate keys will be created by the test. In below example $hash1($key1} will be created if it does not exist yet.
if (exists $hash1{$key1}{$key2) {
} else {

Things that do work

Searching and matching is explained in Regular Expressions.

Print out the contents of $variable in a structured format
use Data::Dumper;
print Dumper($variable);


if < expr > {
} elsif < expr ) {
} else {
$var += <value>
Add <value> to $var (works for -, *, / too)
$string .= $addstring
Concatenate $string and $addstring
$string =~ s/<regexp>/<newvalue>/[g]
Substitute <regexp> with <newvalue> in $string. The g modifier makes the all occurrences of <regexp> are substituted.
$newstring = substr($string,start,length)
Return substring of $string
Return formatted string. format is e.g. "%.3f". Check Python:Strings#Advanced for all formats.
$exitcode = system("a command")
Executed the command in a subprocess and return the exitcode
$output = `a command`
Execute the command and return all command output
Sleep for x seconds
Set standard output to unbuffered, every is put on screen immediately.


%newhash = (%oldhas1,%oldhash3)
$newhashref = {$oldhasref1,$oldhashref3}
Merge 2 hashes, works if all keys are unique


arr1 = split(<sep>,$string)
Split a string in to an array on <sep>
a = arr1[0]
First element in arr1
a = arr1[-1]
Last element in arr1


open (FH, "< filename") || die("Open failed for filename")
Open filename for reading on filehandle FH. Exit the program when the open failed
@array = <FH>
Read the file opened on FH into @array (1 element per line
while ( line = (<FH>) )
Read the file opened on FH line by line

Flow control

The usual works (if-then-else, for , foreach)

|| causes the statement only to be executed if the previous failed. Stop the program and write messaged to standard error.
|| do {codeblock};
Like die but not exiting the program, use to do additional actions on the failure of the previous command


==, !=, >=, >, <, etc
Compare numeric data
eq, ne, ge, gt, lt, etc
Compare strings