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

first
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";
  1. $first ← alpha, $content ← alpha beta , $line ← (empty)

    4my $first→ alpha = "alpha"; #@first="orange", "violet"5my $content→ alpha
    beta
     = "$firstalpha\nbeta\n";6my $line→ (empty) = "";
  2. $line ← alpha

    8if ($contentalpha
    beta
     =~ /^([^\n]*)/) {9    $line→ alpha = $1;10}
  3. print "first=$first ";

    12print "first=$firstalpha\n";13print "line=$linealpha\n";
    outputfirst=alpha
    line=alpha
  1. $first ← orange, $content ← orange beta , $line ← (empty)

    4my $first→ orange = "orange";5my $content→ orange
    beta
     = "$firstorange\nbeta\n";6my $line→ (empty) = "";
  2. $line ← orange

    8if ($contentorange
    beta
     =~ /^([^\n]*)/) {9    $line→ orange = $1;10}
  3. print "first=$first ";

    12print "first=$firstorange\n";13print "line=$lineorange\n";
    outputfirst=orange
    line=orange
  1. $first ← violet, $content ← violet beta , $line ← (empty)

    4my $first→ violet = "violet";5my $content→ violet
    beta
     = "$firstviolet\nbeta\n";6my $line→ (empty) = "";
  2. $line ← violet

    8if ($contentviolet
    beta
     =~ /^([^\n]*)/) {9    $line→ violet = $1;10}
  3. print "first=$first ";

    12print "first=$firstviolet\n";13print "line=$lineviolet\n";
    outputfirst=violet
    line=violet