Perl: Difference between revisions

From wiki
Jump to navigation Jump to search
No edit summary
Line 1: Line 1:
=Warnings=
===Put a ; at the end of each line===
===autovivification===
:If testing for existence of a hash key beware that all intermediate keys will be created by the test. In below example <code>$hash1($key1}</code> will be created if it does not exist yet.
<syntaxhighlight lang=Perl>
if (exists $hash1{$key1}{$key2) {
    ...
} else {
    ...
}
)
</syntaxhighlight>
=Things that do work=
=Things that do work=


Line 41: Line 54:
:Execute the command and return all command output
:Execute the command and return all command output


=Hashes=
==Hashes==
;%newhash = (%oldhas1,%oldhash3)
;%newhash = (%oldhas1,%oldhash3)
:Merge 2 hashes (works is all keys are unique)
:Merge 2 hashes (works is all keys are unique)


==Warning==
==Files==
If testing for existence of a hash key beware that all intermediate keys will be created by the test. In below example <code>$hash1($key1}</code> will be created if it does not exist yet.
;open (FH, "< filename") || die("Open failed for filename")
<syntaxhighlight lang=Perl>
:Open filename for reading on filehandle FH. Exit the program when the open failed
if (exists $hash1{$key1}{$key2) {
 
    ...
;@array = <FH>
} else {
:Read the file opened on FH into @array (1 element per line
    ...
 
}
==Flow control==
</syntaxhighlight>
The usual works (if-then-else, for , foreach)
 
;||die("message")
:|| 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

Revision as of 10:05, 5 March 2019

Warnings

Put a ; at the end of each line

autovivification

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-then-else:

if < expr > {
 <codeblock>
} elsif < expr ) {
 <codeblock>
} else {
 <codeblock>
}
$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
sprintf(format,$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

Hashes

%newhash = (%oldhas1,%oldhash3)
Merge 2 hashes (works is all keys are unique)

Files

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

Flow control

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

||die("message")
|| 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