Я использую cat, чтобы получить содержимое файла, а затем я использую регулярное выражение, чтобы получить то, что я хочу.Когда я изменяю порядок if в примере, я ставлю ПАРОЛЬ в качестве второго, IP будет пустым.
#!/usr/bin/perl
my $param = $ARGV[0];
my $IP;
my $PASSWORD;
my $MODEM;
my @cat = `cat file`;
foreach my $line (@cat){
if ($line =~ /$param/){
if ($line =~ /MODEM:(\w+)/g){ $MODEM = $1; }
if ($line =~ /IP:((\d{1,3}\.){3}\d{1,3})/g){ $IP = $1; }
if ($line =~ /PASSWORD:(.+)/g){ $PASSWORD = $1; }
print $MODEM;
print $IP;
print $PASSWORD;
}
}
Содержимое файла (данные изменяются на поддельные значения):
MODEM:SOMETHING ID:1000018 MAC:606060606060 ID2:123499 IP:1.1.1.1 PASSWORD:pass123
Ожидаемый результат:
SOMETHING1.1.1.1pass123
Но когда я изменяю строку кода на это:
if ($line =~ /MODEM:(\w+)/g){ $MODEM = $1; }
if ($line =~ /PASSWORD:(.+)/g){ $PASSWORD = $1; }
if ($line =~ /IP:((\d{1,3}\.){3}\d{1,3})/g){ $IP = $1; }
результат будет:
SOMETHINGpass123
т.е.IP пуст.Может кто-нибудь объяснить мне, почему это происходит?