LINUX.ORG.RU

Помогите новичку с первым скриптом на перле.

 ,


0

1

Алоха всем.
Задача проста, надо вывести строку, которая начинается на :20:
Сам набросал, но этот код не работает.

#!/usr/bin/perl
open (FILE, 'file');
while (<FILE>) {
 chomp;
        $sender=(^\:20\:);
        print "$sender \n";
                }
close (FILE);
Спс.

★★★★★

$sender=(^\:20\:);

1. матчинг - это либо m(^\:20\:), либо /^\:20\:/
2. матчинг вернёт 0 или 1

Ну и нахрена делать чомп, если потом добавляешь перевод? Ну и ошибка в логике - $sender будет выводиться и для каждой следующей строки, не подходящей под условие

То, что ты хотел можно сделать например так:

print $_ if /^\:20\:/;

redgremlin ★★★★★ ()
Последнее исправление: redgremlin (всего исправлений: 1)
Ответ на: комментарий от redgremlin

Спасибо. заработало.
Я пытался пихнуть в переменную потому, что мне нужно несколько строк.
То есть хочу добавить туда и файлы которые начинаются на :21: , :gewt: и т.п.

dada ★★★★★ ()
Ответ на: комментарий от dada

То есть хочу добавить туда и файлы которые начинаются на :21: , :gewt: и т.п.

Тогда надо как-то так:

@tags = ('20', '21', 'gewt', 'etc');
if (/^\:(.+?)\:/) { 
  $tag = $1;
  $sender .= $_ if grep { $_ eq $tag } @tags;
}

redgremlin ★★★★★ ()
Последнее исправление: redgremlin (всего исправлений: 1)
Ответ на: комментарий от redgremlin

Целиком как-то так:

#!/usr/bin/perl

use strict;

open (my $file, '<', 'file');
my @tags = ('20', '21', 'gewt', 'etc');
my $sender;

while (my $line = <$file>) {
  if ($line =~ /^\:(.+?)\:/) { 
    my $tag = $1;
    $sender .= $line if grep { $_ eq $tag } @tags;
  }
}
close ($file)
redgremlin ★★★★★ ()

Я обескуражен, никто не кинул ни одного однострочника.

MyNameIsWinner ()

#!/usr/bin/perl -w

use strict;

open my $file, 'file' or die;
/^:20:/ && print while <$file>;
close $file;

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