The dot operator joins strings without changing the original scalar values.

concatenation Concatenation builds a new string by placing one string after another.

Concatenation

suffix
concatenation.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my $suffix = "log";
my $base = "report";
my $filename = $base . "." . $suffix;
my $label = "file:" . $filename;

print "suffix=$suffix\n";
print "filename=$filename\n";
print "label=$label\n";
use strict;
use warnings;

my $suffix = "txt";
my $base = "report";
my $filename = $base . "." . $suffix;
my $label = "file:" . $filename;

print "suffix=$suffix\n";
print "filename=$filename\n";
print "label=$label\n";
use strict;
use warnings;

my $suffix = "csv";
my $base = "report";
my $filename = $base . "." . $suffix;
my $label = "file:" . $filename;

print "suffix=$suffix\n";
print "filename=$filename\n";
print "label=$label\n";
  1. $suffix ← log, $base ← report, $filename ← report.log, $label ← file:report.log

    4my $suffix→ log = "log"; #@suffix="txt", "csv"5my $base→ report = "report";6my $filename→ report.log = $basereport . "." . $suffixlog;7my $label→ file:report.log = "file:" . $filenamereport.log;89print "suffix=$suffixlog\n";10print "filename=$filenamereport.log\n";11print "label=$labelfile:report.log\n";
    outputsuffix=log
    filename=report.log
    label=file:report.log
  1. $suffix ← txt, $base ← report, $filename ← report.txt, $label ← file:report.txt

    4my $suffix→ txt = "txt";5my $base→ report = "report";6my $filename→ report.txt = $basereport . "." . $suffixtxt;7my $label→ file:report.txt = "file:" . $filenamereport.txt;89print "suffix=$suffixtxt\n";10print "filename=$filenamereport.txt\n";11print "label=$labelfile:report.txt\n";
    outputsuffix=txt
    filename=report.txt
    label=file:report.txt
  1. $suffix ← csv, $base ← report, $filename ← report.csv, $label ← file:report.csv

    4my $suffix→ csv = "csv";5my $base→ report = "report";6my $filename→ report.csv = $basereport . "." . $suffixcsv;7my $label→ file:report.csv = "file:" . $filenamereport.csv;89print "suffix=$suffixcsv\n";10print "filename=$filenamereport.csv\n";11print "label=$labelfile:report.csv\n";
    outputsuffix=csv
    filename=report.csv
    label=file:report.csv

Follow the Text

  1. $suffix starts as log.
  2. $base is report.
  3. $filename becomes report.log.
  4. $label becomes file:report.log.
  5. The program prints suffix=log, filename=report.log, and label=file:report.log. | suffix | filename | label | | --- | --- | --- | | log | report.log | file:report.log | | txt | report.txt | file:report.txt | | csv | report.csv | file:report.csv |

Exercise: concatenation.pl

Reproduce label=file:report.log, then use suffixes txt and csv to predict each filename and label.