<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.scott5.org/index.php?action=history&amp;feed=atom&amp;title=Perl_Basics</id>
	<title>Perl Basics - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.scott5.org/index.php?action=history&amp;feed=atom&amp;title=Perl_Basics"/>
	<link rel="alternate" type="text/html" href="https://wiki.scott5.org/index.php?title=Perl_Basics&amp;action=history"/>
	<updated>2026-04-13T00:33:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.scott5.org/index.php?title=Perl_Basics&amp;diff=540&amp;oldid=prev</id>
		<title>Scott: /* Strings */</title>
		<link rel="alternate" type="text/html" href="https://wiki.scott5.org/index.php?title=Perl_Basics&amp;diff=540&amp;oldid=prev"/>
		<updated>2011-02-04T23:22:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Strings&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Programs ==&lt;br /&gt;
Perl file has extension &amp;quot;.pl&amp;quot;. Start file with &amp;quot;shebang&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/perl -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
On unix systems, this tells the compiler which binary to use and with what options.&lt;br /&gt;
&lt;br /&gt;
End lines with semicolon. Comment with #. Example: &amp;quot;hello_world.pl&amp;quot; &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/perl -w&lt;br /&gt;
# Here is a comment.&lt;br /&gt;
print &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Execute from command line with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl hello_world.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pragmas ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use strict;   # tells the compiler to be stricter in checking for problems&lt;br /&gt;
use integer;  # all arithmetic uses integers only&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List Literals ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
(2, 5, 8)        # a list with three numerical elements&lt;br /&gt;
(1..10)          # a list with ten numerical elements&lt;br /&gt;
($n+3, $m)       # a list with two elements&lt;br /&gt;
(&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;)  # a list with three string elements&lt;br /&gt;
qw( a b c )      # same list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scalar Variables ==&lt;br /&gt;
Scalar variables are initialized as undef, which translates to 0 for numbers and Â´Â´ for strings. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$age = 12;&lt;br /&gt;
$name = &amp;quot;Bill&amp;quot;;&lt;br /&gt;
($name, $age) = (&amp;quot;Bill&amp;quot;, 12);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arrays and Lists ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
@dogs = (&amp;quot;Lassie&amp;quot;, &amp;quot;Biff&amp;quot;, &amp;quot;Bruno&amp;quot;);&lt;br /&gt;
@ages = (3, 4, 5);&lt;br /&gt;
$Lassie_age = $ages[0];&lt;br /&gt;
$last_element_index = $#dogs     # gives index of last element = size-1&lt;br /&gt;
$last_element = $dogs[$#dogs]    # last element&lt;br /&gt;
$last_element = $dogs[-1]        # also refers to last element&lt;br /&gt;
# shift, unshift, push, pop, reverse, sort&lt;br /&gt;
@array = qw$ a b c $;            # qw operates on any punctuation pair&lt;br /&gt;
$first = shift @array;           # $first is &amp;quot;a&amp;quot;, @array becomes (&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;)&lt;br /&gt;
unshift @array, $first;          # @array is back to (&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;)&lt;br /&gt;
$last = pop @array;              # $last is &amp;quot;c&amp;quot;, @array becomes (&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;)&lt;br /&gt;
push @array, $last;              # @array is back to (&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;)&lt;br /&gt;
push @array, 1..3;               # @array becomes (&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, 1, 2, 3)&lt;br /&gt;
@array = reverse @array;         # @array becomes (3, 2, 1, &amp;quot;c&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;a&amp;quot;)&lt;br /&gt;
@array = sort @array;            # @array becomes (1, 2, 3, &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;)&lt;br /&gt;
@array = reverse sort @array;    # @array becomes (&amp;quot;c&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;a&amp;quot;, 3, 2, 1)&lt;br /&gt;
# iterate over an array&lt;br /&gt;
foreach $element (@my_array){&lt;br /&gt;
    # do something with $element&lt;br /&gt;
    # the elements of @my_array can be altered this way&lt;br /&gt;
}&lt;br /&gt;
# scalar vs list context&lt;br /&gt;
@array = qw( a b c );&lt;br /&gt;
$number = @array;                # $number is 3&lt;br /&gt;
$number = scalar @array;         # more explicit&lt;br /&gt;
@array = &amp;quot;hi, there&amp;quot;;            # becomes a list with one string element&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hash Variables ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
%list = (&amp;quot;Lassie&amp;quot;, 3, &amp;quot;Biff&amp;quot;, 4, &amp;quot;Bruno&amp;quot;, 5);&lt;br /&gt;
%same_list = (&lt;br /&gt;
    Lassie   =&amp;gt; 3,&lt;br /&gt;
    Biff     =&amp;gt; 4,&lt;br /&gt;
    Bruno    =&amp;gt; 5,  # final trailing comma is legal but optional&lt;br /&gt;
); #strings implicitly quoted&lt;br /&gt;
$same_list_again{Lassie} = 3;&lt;br /&gt;
$same_list_again{Biff} = 4;&lt;br /&gt;
$same_list_again{Bruno} = 5;&lt;br /&gt;
$Lassie_age = $list{Lassie};&lt;br /&gt;
# extract keys and values&lt;br /&gt;
my @keys = keys %list;      # @keys is (&amp;quot;Lassie&amp;quot;, &amp;quot;Biff&amp;quot;, &amp;quot;Bruno&amp;quot;)&lt;br /&gt;
my @values = values %list;  # @values is (3, 4, 5)&lt;br /&gt;
# check for a given key&lt;br /&gt;
if (exists $list{&amp;quot;Rover&amp;quot;}){...}&lt;br /&gt;
# delete a given key&lt;br /&gt;
delete $list{&amp;quot;Lassie&amp;quot;})&lt;br /&gt;
# iterate over a hash:&lt;br /&gt;
while ( ($key, $value) = each %my_hash ){&lt;br /&gt;
    # do something with $key and $value&lt;br /&gt;
}&lt;br /&gt;
# iterate over a hash in key-sorted order&lt;br /&gt;
foreach $key (sort keys %hash) {&lt;br /&gt;
    $value = $hash{$key};&lt;br /&gt;
    # do something with $key and $value&lt;br /&gt;
}&lt;br /&gt;
# flip a hash (values must be unique)&lt;br /&gt;
%ip_addresses = reverse %host_names;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variable Scope ==&lt;br /&gt;
Variables are global by default. Loop control variables are local to the loop. Use the &amp;quot;my&amp;quot; command to declare locally. &lt;br /&gt;
&lt;br /&gt;
== Strings ==&lt;br /&gt;
Use double quotes to allow variable interpolation. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$name = &amp;quot;Barney&amp;quot;;&lt;br /&gt;
print &amp;#039;My name is $name&amp;#039;;  # prints My name is $name&lt;br /&gt;
print &amp;quot;My name is $name&amp;quot;;  # prints My name is Barney&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concatenate with period &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$temp = &amp;quot;another &amp;quot;.&amp;quot;variable&amp;quot;;   # temp is another variable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Substring &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
print substr $name, 2, 3;        # returns ott&lt;br /&gt;
print substr $name, 2, 3, &amp;quot;at&amp;quot;;  # returns ott&lt;br /&gt;
print $name;                     # returns Scat&lt;br /&gt;
my $suffix = substr($file, -3);  # last 3 characters&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String comparison &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
if ($name eq &amp;quot;Barney&amp;quot;)...   # equals&lt;br /&gt;
# also ne, gt, ge, lt, le&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tokenizer &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use Text::ParseWords;&lt;br /&gt;
my @list = quotewords(&amp;quot;:&amp;quot;, 1, $line); # specific delimiter&lt;br /&gt;
OR&lt;br /&gt;
my @list = shellwords($line);  # split by whitespace&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Length &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
my $size = length($line)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dates ==&lt;br /&gt;
Represented as seconds since Jan 1, 1970 using long integers.&lt;br /&gt;
&lt;br /&gt;
Date::Parse - Parse date strings into time values &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use Date::Parse;&lt;br /&gt;
$time = str2time($date);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Timestamp ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);&lt;br /&gt;
printf &amp;quot;%4d-%02d-%02d %02d:%02d:%02d\n&amp;quot;,$year+1900,$mon+1,$mday,$hour,$min,$sec;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
gives&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2007-07-19 15:33:29&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Default and Special Variables ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# scalar default variable is $_&lt;br /&gt;
foreach (1..10) {  # Uses $_ by default&lt;br /&gt;
    print &amp;quot;I can count to $_!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
# array default variable is @_&lt;br /&gt;
sub is_greater{&lt;br /&gt;
    my ($first, $second) = @_;&lt;br /&gt;
    return ($first &amp;gt; $second);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* $0 is the name of the called program&lt;br /&gt;
* $1 - $99 are regular expression capture variables&lt;br /&gt;
* @ARGV is the array of arguments from the command line (not including program name)&lt;br /&gt;
* $! is the error message given by the last failed command&lt;br /&gt;
* $| set this to 1 to turn off buffering for the current output filehandle&lt;br /&gt;
* $` is everything before a regular expression match&lt;br /&gt;
* $&amp;amp; is the regular expression match itself&lt;br /&gt;
* $&amp;#039; is everthing after the regular expression match&lt;br /&gt;
&lt;br /&gt;
== Conditionals and Loops ==&lt;br /&gt;
Perl interprets the value 0 as false for numbers. The strings and &amp;#039;0&amp;#039; are interpreted as false. &lt;br /&gt;
&lt;br /&gt;
=== Compound ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
if (expression) {block}&lt;br /&gt;
else {block}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
unless (expression) {block} &lt;br /&gt;
else {block}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
if (expression) {block}&lt;br /&gt;
else {block}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
if (expression1) {block} &lt;br /&gt;
elsif (expression2) {block} &lt;br /&gt;
else {block}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
while (expression) {block}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
until (expression) {block}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
for ($i = 0; $i &amp;lt; $max; $i++) {block}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
foreach var (list) {block}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== One-liners ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
statement if expression;&lt;br /&gt;
statement unless expression;&lt;br /&gt;
statement while expression;&lt;br /&gt;
statement until expression;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== System Calls ==&lt;br /&gt;
If you aren&amp;#039;t collecting input from the call: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
my $status = system(&amp;quot;test -e $file&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are collecting input: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
my @p_file_params = `$p_external_programs{pfprint} -f $p_file`&lt;br /&gt;
    or die(&amp;quot;pfprint failed!\nAre you sure \&amp;quot;$p_file\&amp;quot; is a valid P-file?\n&amp;quot;, usage());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Errors and Warnings ==&lt;br /&gt;
die aborts the program and gives a non-zero exit status: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
open(FH, $fileName) or die &amp;quot;open $fileName failed: $!&amp;quot;;&lt;br /&gt;
# add a newline to the die argument to suppress line numbers&lt;br /&gt;
if (@ARGV != 2){&lt;br /&gt;
    die &amp;quot;There should be two arguments!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
warn is just like die except that the program does not abort&lt;/div&gt;</summary>
		<author><name>Scott</name></author>
	</entry>
</feed>