У меня есть сценарий, который подсчитывает количество данных на входе DATA
и на основе этого подсчета он будет продолжать работу.
Ниже мой сценарий, который работает, как ожидалось.
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my (@array, @nodes);
my $count = 0;
while (<DATA>) {
push @array, $_;
$count = $1 if /Total number of data found :\s*(\d+)/;
}
print "Count:$count\n";
print "Array".Dumper(\@array);
if( $count > 0 ){
foreach my $ele(@array){
chomp $ele;
if( $ele =~ /NodeName : (\w+)/){
push @nodes, $1;
}
}
} else {
print "Count is less than 1.. Existing\n";
exit 0;
}
print Dumper(\@nodes);
__DATA__
Data : Network=R9,N=Node1
NodeName : Node1
DateTime : 05-08-2020 10:00:05
Data : Network=R9,N=Node2
NodeName : Node2
DateTime : 05-08-2020 10:00:10
Total number of data found : 2
Но здесь я использую 2 цикла, while
и foreach
.
while
используется для захвата подсчета, а foreach
- для перебора каждого элемента данных, который были сохранены в @array
при выполнении операции while
.
Возможно ли иметь только 1 л oop, либо while
, либо for
, где я могу получить подсчет и на основе подсчета Я могу получить NodeName
из DATA
.