Files and Safe IO
Read from Text
Safe IO code often starts by treating input as text that must be read one line at a time.
input text
Input text is data the program reads before it decides what to do next.
Read from Text
scalar_read.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
my $first = "alpha";
my $content = "$first\nbeta\n";
my $line = "";
if ($content =~ /^([^\n]*)/) {
$line = $1;
}
print "first=$first\n";
print "line=$line\n";
use strict;
use warnings;
my $first = "orange";
my $content = "$first\nbeta\n";
my $line = "";
if ($content =~ /^([^\n]*)/) {
$line = $1;
}
print "first=$first\n";
print "line=$line\n";
use strict;
use warnings;
my $first = "violet";
my $content = "$first\nbeta\n";
my $line = "";
if ($content =~ /^([^\n]*)/) {
$line = $1;
}
print "first=$first\n";
print "line=$line\n";
$first ← alpha, $content ← alpha beta , $line ← (empty)
4my $first→ alpha = "alpha"; #@first="orange", "violet"5my $content→ alpha beta = "$firstalpha\nbeta\n";6my $line→ (empty) = "";$line ← alpha
8if ($contentalpha beta =~ /^([^\n]*)/) {9 $line→ alpha = $1;10}print "first=$first ";
12print "first=$firstalpha\n";13print "line=$linealpha\n";outputfirst=alpha line=alpha
$first ← orange, $content ← orange beta , $line ← (empty)
4my $first→ orange = "orange";5my $content→ orange beta = "$firstorange\nbeta\n";6my $line→ (empty) = "";$line ← orange
8if ($contentorange beta =~ /^([^\n]*)/) {9 $line→ orange = $1;10}print "first=$first ";
12print "first=$firstorange\n";13print "line=$lineorange\n";outputfirst=orange line=orange
$first ← violet, $content ← violet beta , $line ← (empty)
4my $first→ violet = "violet";5my $content→ violet beta = "$firstviolet\nbeta\n";6my $line→ (empty) = "";$line ← violet
8if ($contentviolet beta =~ /^([^\n]*)/) {9 $line→ violet = $1;10}print "first=$first ";
12print "first=$firstviolet\n";13print "line=$lineviolet\n";outputfirst=violet line=violet