Я пытаюсь сделать сумму массива в моем Perl-коде, но я не смог получить правильный вывод.Perl array overriding
Вот мой пример кода
use File::Find::Rule;
use Date::Parse;
my ($dir, $type, $fh, $line, $str_1,
$str_2,$str_3, $str_4);
my @array;
$dir = '/dir/test/';
$type = '*';
$str_1 = 'somestr1';
$str_2 = 'somestr2';
$str_3 = 'somestr3';
$str_4 = 'somestr4';
my @files = File::Find::Rule->file()->name($type)->in($dir);
open $out, '>>', "output_log" or die "Unable to open 'output_log' : $!";
print $out "\Logs \n";
print $out "--------------------------\n";
close $out or die "Unable to finish writing output_log : $!";
for my $file (@files) {
open $fh, '<', $file or die "can't open $file: $!";
open $out, '>>', "output_log" or die "Unable to open 'output_log' : $!";
while ($line = <$fh>) {
if ($line !~ /$str_1/ && $line =~ /$str_2/)
{
@array = $somevar # result of this loop 2,3
}
if ($line !~ /$str_3/ && $line =~ /$str_4/)
{
@array = $somevar #result of this loop 2,3,4,5,6
}
}
close $out or die "Unable to finish writing output_log : $!";
}
Так вот то, что я хочу
@array = (2,3,2,3,4,5,6)
and sum of @array
но Unfornately, если я распечатать этот массив, на котором выполняется каждую строку, но вместо этого я хочу написать цикл, который сохраняет результат в массиве из обоих блоков if. теперь код переопределяет @array во втором блоке if. Надеюсь, я сделал это ясно! Пожалуйста, помогите
Надеюсь, что вы используете '' strict''' и 'use warnings' all'' в верхней части своей программы? Они важны в каждой программе Perl, которую вы пишете. И вы не должны объявлять все свои переменные в верхней части файла, поскольку это затрудняет поиск простых ошибок. Это было необходимо для очень старых компиляторов C, но я не могу придумать ни одного языка, где не лучше объявлять каждую переменную, где она впервые определена. – Borodin