Ваш $digit
находится в цикле while, а затем вы пытаетесь получить к нему доступ с помощью строки:
print FILE "9 $digit";
Вы должны объявить его вне цикла while, чтобы это было видно в этой строке.
Или, что еще лучше, просто откройте свой выходной файл перед циклом и запишите цифру в выходной файл в цикле и сохраняйте переменную $digit
в пределах цикла.
Если вам нужен только последний экземпляр, соответствующий вашему регулярному выражению, тогда:
#!/usr/bin/perl
use strict;
open (DATA, "infile.txt") || die("cant open infile\n");
my $digit = "";
while (<DATA>) {
chomp;
if (/\s9\s(\d+)/) #regex to capture digit '234' from ' 9 234'
{
print "Found digit is $1\n"; #
$digit = $1;
}
}
close(DATA);
if ($digit ne "") {
open (FILE, ">outfile.txt") || die("cant open outfile\n");
print FILE "9 $digit\n";
close(FILE);
}
else
{
print "No digit found!\n";
}
exit;
Если вы хотите получить все экземпляры в infile, где совпадает ваше регулярное выражение, то вам нужно выполнить следующее.
#!/usr/bin/perl
use strict;
open (DATA, "</usr/infile") || die("cant open infile\n");
open (FILE, ">/usr/outfile") || die("cant open outfile\n");
while (<DATA>) {
chomp;
if (/\s9\s(\d+)/) #regex to capture digit '234' from ' 9 234'
{
print "Found digit is $1\n"; #
print FILE "9 $1\n";
}
}
close(DATA);
close (FILE);
exit;