[Perl] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    спасибо, только чото не пойму - нет ретурна, что такое %res = (); и какую функцию несет

    Но это то, что надо, так или иначе!!!! Сенкс большое
     
  2. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    %res = (); - это пустой хэш )
    Ретурны я убрал, т.к. хэш расшаренный и возвращать как бы ничего не надо. А вот пример без использования шарного хэша и с ретурнами
    Code:
    #!/usr/bin/perl               
    use threads;                  
    use threads::shared;          
    my $n : shared;               
    
    $a = gets();
    print $_, ' => ', $a->{$_}, "\n" for sort {$a <=> $b} keys %$a;
    #print $a . "\n";
    
    sub gets {
      $thr = 10;
      $n = 0;
      %res = ();
      for(0..$thr) {
        $trl[$_] = threads->create(\&gets1);
      }
      for(0..$thr) {
        #$res[$_] = $trl[$_]->join;
        %res = (%res, %{$trl[$_]->join});
        #print $n, "\n";
      }
      sub gets1 {
        $| = 1;
        $ii = "";
        while ($n < 10) {
          { lock($n);
          $n++; }
          $ii .= $n;
          $hash{$n} = $ii;
          #print $ii . "\n";
        }
        #print $ii, "\n";
        return \%hash
      }
      return \%res;
    }
    
     
  3. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Великолепно! Оба варианта рабочие. Чем один лучше или хуже другого? Шара больше памяти жрет при большом потоке или ...?
     
  4. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    PHP:

    my 
    @fuck = (1..10);
    my @= (18,19);

    sub shit {

    my(@x,@y) = @_;
    print @
    x."\r\n";
    print @
    y."\r\n";

    }

    shit(@fuck,@s);

    system("PAUSE");

    Выводит 12,0:(.Хотел вывести значения обоих массивов...
     
  5. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    Как осуществить запись в фаил?:

    open(b,">s.txt);
    print b "sam";
    close(b);

    В итоге пусто(
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    #!/usr/bin/perl
    open(b,">>s.txt");
    print b "sam";
    close(b);
     
  7. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    хмм,запись заработала,а вот чтение хромает:

    open(b,"<s.txt");
    print b STDOUT; # по всякому уже))разве что в другой фаил копирнуть могу,но на #консольку хотел
    close(b);
     
  8. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    #!/usr/bin/perl
    open(b, "<", "s.txt");
    while(<b>) {
    chomp;
    print $_ . "\n";
    }
     
  9. Spyder

    Spyder Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    0_o
     
    5 people like this.
  10. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    $\ = "\n";
    my @fuck = (1..10);
    my @s = (18,19);
    
    sub shit {
      my ($x, $y) = @_;
    
      print join ', ', @$x;
      print join ', ', @$y;
    }
    
    shit (\@fuck, \@s);
    
    
     
    1 person likes this.
  11. bleeep

    bleeep New Member

    Joined:
    1 Feb 2009
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    Подскажите как осуществлять поиск не в переменной $_ ?Допустим я открыл дескриптор файла, поместил содержимое файла в массив затем его преобразовал в строку и уже в этой строке как осуществить поиск?Постоянно присваивать переменной $_ ??? А если искать не в скаляре а в массиве?Так можно?))
    Уже разобрался только не получается замена слова в текстовом файле((((
    Code:
    #!/usr/bin/Perl -w open (FILE,">>text.txt")||die "error $!"; @filetxt=<FILE>; $file=join ('',@filetxt);chomp $file; $file=~s/.*are.*/was/; print FILE $file; close(FILE);
    В чем тут проблема???
     
    #1251 bleeep, 27 Oct 2009
    Last edited: 27 Oct 2009
  12. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Попробуй так
    PHP:
    open(F"<file.txt") || die $!;
    undef $/;
    my $file = <F>;
    close F;

    $file =~ s/.*are.*/was/; 

    open(F">file.txt") || die $!;
    print 
    F $file;
    close F;
     
    _________________________
    1 person likes this.
  13. bleeep

    bleeep New Member

    Joined:
    1 Feb 2009
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    Спасибо))Получилось, подскажи, а что за переменная $/ ? и что делает функа my?))
     
  14. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    http://www.perl.com/doc/manual/html/pod/perlvar.html
    http://perldoc.perl.org/functions/my.html
     
    _________________________
  15. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    C:\>perl -e " for (1..5) { print 'X'.\"\r\n\" x 2; } "
    X

    X

    X

    X

    X

    Как сделать так,чтобы перл в ряды всё это в колонки выводил ?) Такой ощущение,что оператор х игнорируется,потому,что если убрать \r\n,то работает,но всё в однц строчку пишет соответственно.
     
  16. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    А какой вывод ты хочешь получить то?
     
    _________________________
  17. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    Если непонятно: оператор my() (системная функция) объявляет переменную и устанавливает её в лексической области видимости.
    Лексическая область видимости - это временная память,куда сохраняются имена переменных.Значения же переменных обычно сохраняются в стеках.
    В общем,переменные лексической области видимости называют в других языках программирования как локальные,но,в отличие от других языков, в PERL пакетные переменные(глобальные) и локальные(пеерменные лексической области видимости) не конфликтуют между собой хотя бы из-за лексемы
    Code:
    ::
    ЗЫ: Знаю,что наговорил много лишнего,но тем не менее...
     
  18. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    Всмысле какой ? в STDOUT(на экран).Просто использовние perl -e меня меньше напрягает,чем открывать закрывать фаил...это что-то вроде теста.
     
  19. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    В смысле мне непонятно:
     
    _________________________
  20. GenTao

    GenTao New Member

    Joined:
    10 Oct 2009
    Messages:
    123
    Likes Received:
    2
    Reputations:
    -3
    ааа...:))))Ну,в такой вид:


    х ... ... ...
    х
    х
    х
    х

    ... я пометил следующую колонку:)
     
Thread Status:
Not open for further replies.