Чтобы выяснить, почему посланной код «не имеет смысла», perl -p -i -e
что-то нужно ввести в командной строке, а не то, что входит в программу Perl. В принципе, perl -p -i -e '...'
сам по себе является программой для запуска. perldoc perlrun объясняет более подробно, но:
-p
помещает петлю вокруг ...
кода, который запускает его на каждую строку входного файла
-i
означает для редактирования входного файла в месте (вместо создания любого нового файлы для вывода)
-e
говорит perl
, что вы предоставляете исполняемый код как часть командной строки, а не запуск программы из файла
Правильный способ сделать то, что вы пытались бы что-то вроде (предупреждение - непроверенные коды):
#!/usr/bin/env perl
use strict;
use warnings;
open my $in, '<', '263.xml' or die "Can't open input file: $!";
open my $out_on, '>', 'on.xml' or die "Can't open 'on' output file: $!";
open my $out_off, '>', 'off.xml' or die "Can't open 'off' output file: $!";
while (my $line = <$in>) {
$line =~ /<caldata chopper="(on|off)"/;
if ($1 eq 'on') {
print $out_on, $line;
} elsif ($1 eq 'off') {
print $out_off, $line;
}
}
Однако следует отметить, что этот метод не будет создавать соответствующие выходные XML-файлы. Он просто сгенерирует файлы, содержащие списки из caldata
элементов без каких-либо дополнительных окружающих элементов, необходимых для создания единого, хорошо сформированного XML-документа. Если вам нужен хорошо сформированный XML-документ, я бы предложил взглянуть на XML::Twig вместо того, чтобы пытаться анализировать или генерировать XML вручную.
То, что вы разместили как «_My code_», не имеет смысла. У вас буквально есть строка с 'perl ...' в скрипте? 'Perl' - некотируемое слово в скрипте. Само регулярное выражение прекрасно (нет необходимости скрывать '' 'или что-то еще). Однако использование' $ fh' неверно - это дескриптор файла. Кроме того, вам явно не хватает ';' на этой строке 7 'from (the first) error – zdim
@zdim Да, я начинаю с perl.How должна выглядеть строка? –
ОК. Это далеко не правильный Perl.' open' line нуждается в ';'. '$ fh 'является _filehandle_, который дает доступ к ресурсу (файлу) - вы используете его для чтения данных из указанного ресурса, а не для его печати. Таким образом, вам понадобится цикл, например' while (<$fh>) '. 'perl' в языке. Утверждение' $ fh, если /.../ 'не имеет смысла, я не понимаю, что вы подразумеваете под этим. Фрагментная часть регулярного выражения' /.../ ', является отлично, но остальное (второе '/.../') не имеет смысла. И т.д. Я бы предложил сначала изучить основы языка. – zdim