Changes between Version 30 and Version 31 of Perl


Ignore:
Timestamp:
01/25/07 11:45:59 (17 years ago)
Author:
atzm
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Perl

    v30 v31  
    594594}}} 
    595595 
     596=== DATA の罠 === 
     597 * hoge.pm 内の DATA の position が 1 回目の new で EOF に到達するため,2 回目の new では $self->{'data'} が空になる. 
     598{{{ 
     599#!perl 
     600package hoge; 
     601 
     602sub new { 
     603    my $class = shift; 
     604    my @data  = <DATA>; 
     605    return bless {'data' => \@data}, $class; 
     606} 
     607 
     608sub hoge { 
     609    my $self = shift; 
     610    return $self->{'data'}; 
     611} 
     612 
     6131; 
     614 
     615__DATA__ 
     616hoge 
     617hage 
     618hige 
     619}}} 
     620{{{ 
     621#!perl 
     622use hoge; 
     623 
     624my $hoge1 = new hoge(); 
     625print "*** 1\n"; 
     626print @{$hoge1->hoge()}; 
     627 
     628 
     629my $hoge2 = new hoge(); 
     630print "*** 2\n"; 
     631print @{$hoge2->hoge()}; 
     632}}} 
     633 * 何度も new できるようにするためには,以下のようにする必要がある. 
     634{{{ 
     635@@ -5,7 +5,9 @@ 
     636  
     637 sub new { 
     638     my $class = shift; 
     639+    my $pos   = tell DATA; 
     640     my @data  = <DATA>; 
     641+    seek DATA, $pos, 0; 
     642     return bless {'data' => \@data}, $class; 
     643 } 
     644}}} 
     645 
    596646== スクリプトを直接実行した時だけ呼ぶコード == 
    597647 * とどのつまりは Python で言うところの {{{if __name__ == "__main__":...}}} .