LINUX.ORG.RU

Регулярка и хеши в perl

 ,


0

1

Вот такой вопрос на пользование регулярных выражений и хешей. Есть строка в которой указан имя интерфейса и его адрес разделенные пробелом (к примеру: em1 192.192.192.192), но может попадаться такая строка в которой адрес отсутствует, как можно такую строку разделить на две части, соответственно первая часть это имя интерфейса а вторая часть его адрес(либо пусто), и после поместить их в анонимные хеши. Для наглядности вывести результат на консоль что попало в хеш

после поместить их в анонимные хеши

Не понял что значит анонимные хеши, написал как подсказал спинной мозг:

use Data::Dumper;

my ($interface, $ip) = 'em1 192.192.192.192' =~ m{^(\S+) \s (\d+\.\d+\.\d+\.\d+)$}x;
print Dumper({$interface => $ip});

ПС школьники совсем обленились, приносят сюда свои «дамашки».

outtaspace ★★★ ()
Последнее исправление: outtaspace (всего исправлений: 1)
echo 'em1 192.192.192.192\nem2 127.0.0.1' | perl -alne '$a{$F[0]} = $F[1] }{ print $a{"em1"}; print $a{"em2"}'
anonymous ()
my ($interface, $ip) = split /\s+/ => 'em1 192.192.192.192';
joy4eg ★★★★★ ()
Ответ на: комментарий от outtaspace

не совсем то. Имеются данные типа

  • (p2p3 192.168.66.2
  • p2p1
  • em1 192.192.192.192
  • p2p4
  • em2 192.168.99.2
  • p2p2 192.168.55.2 ... ...)

нужно пройтись по строкам и разделить их на две части. И каждую часть поместить в отдельный хеш

sis_privet ()
Ответ на: комментарий от sis_privet
echo 'em1 192.192.192.192\nem2 127.0.0.1' | perl -MData::Dumper -alne 'push @a, {$F[0] => $F[1]} }{ print Dumper(@a)'
anonymous ()
Ответ на: комментарий от sis_privet
use Data::Dumper;

my $result = {};
{
    my $file = q{};

    open my $fh, '<', $file or die $!;
    while (my $each_line = <$fh>) {
        chomp $each_line;

        my ($interface, $ip) = split m{\s+}x, $each_line;

        $result->{$interface} = $ip;
    }
    close $fh;
}

print Dumper($result);
outtaspace ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.