Я преподаю Perl и Regex, прочитав отличный от Jeffrey Friedl Mastering Regular Expressions.Прочитайте содержимое текстового файла со смещения до конца в Perl
При попытке решить упражнение «Утилита малой почты», начиная со страницы 53, я наткнулся на проблему не знать, как сохранить содержимое файла в переменной , начиная со смещения.
Итак, вот мой (сокращенный) сценарий.
my ($body, $line, $subject);
$body = $line = $subject = "";
open(MYFILE, "king.in") || die("Could not open file!");
# Read the file's content line by line
while ($line = <MYFILE>)
{
# An empty line marks the beginning of the body
if ($line =~ m/^\s+$/) {
# HERE IS THE ISSUE
# Save the file content starting from the current line
# to the end of the file into $body
last;
}
if ($line =~ m/^subject: (.*)/i) {
$subject = $1;
}
# Parse additional data from the mail header
}
close(MYFILE);
print "Subject: Re: $subject\n";
print "\n" ;
print $body;
Я сделал некоторые исследования в интерактивном режиме, но не мог понять, как положить оставшуюся часть файла (то есть, электронный орган) в переменную $ тела.
я понял, что я мог бы получить текущую позицию в файл в байтах, используя $pos = tell(MYFILE);
В конце концов я закончил с работой, но неудовлетворительно solution сдачи линии самого файла первой в массив.
Как сохранить содержимое файла, начиная со смещения (либо в виде строки или байта) в $ body?
Edit: Моего решения им обеспечивается vstm- является использование $body = join("", <MYFILE>)
читать в остальной части файла при столкновении с пустой строкой, которая отмечает начало тела. Весь написанный мной сценарий можно найти here.
Хотя это отлично работает для меня сейчас, я все равно хотел бы знать, как сказать (элегантно) в Perl «дать мне строки от x до z этого файла».
Спасибо за советы.
'$ body = join (" ",);' сделал трюк отлично, благодаря кучу. Из любопытства: Как мне сказать «Дайте мне строки от x до z этого файла» в Perl? Должен ли я сначала поместить все строки в массив? –