Проблема Perl с символом% - PullRequest
0 голосов
/ 18 октября 2018

Я пишу скрипт, в котором я буду запускать команду на оболочке bash и распечатывать результат.Я бы прочитал из файла A.txt

A.txt

AAA:BBB
CCC:DDD
AAA:FFF

MyCode

my $file = /path/to/A.txt;
open(my $fh, '<', $file)
 or die "Couldn't open file";

while (my $line = <$fh>){
 my ($ins,$pre) = split /:/, $line;

 if ((substr $ins,0,1) eq "A"){
  $mo = "A/C/$ins";
 }
 elsif ((substr $ins,0,1) eq "C"){
  $mo = "X/Y/$ins";
 }

 Env::modulecmd:load($mo);
 print "Running command cat $pre\%";
 $result = `cat '$pre'\% | head`;
 Env:modulecmd:unload($mo);
 print $result;
}

close $fh;

У меня странная проблема, команда печати работает только правильнодля последней строки, для остальных он печатает символ «%» в следующей строке, но для последней строки он работает точно так, как ожидалось.

Таким образом, в результате переменная $ result оценивается только по справедливости дляпоследняя строка A.txt и остальные 2 строки не дают никакого вывода.

Может кто-нибудь подсказать, пожалуйста, что я здесь делаю не так.

Спасибо за ваше время

1 Ответ

0 голосов
/ 18 октября 2018

Вы не удаляете окончания строк.Как правило, это можно сделать следующим образом:

chomp($line);

Однако вы читаете текстовый файл Windows (строки, заканчивающиеся CRLF) в системе Unix (строки, заканчивающиеся LF).Либо конвертируйте файл (например, используя dos2unix), либо используйте следующее вместо chomp:

$line =~ s/\s+\z//;
...