Changes between Version 43 and Version 44 of Perl


Ignore:
Timestamp:
06/24/07 14:12:22 (17 years ago)
Author:
atzm
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Perl

    v43 v44  
    710710== AUTOLOAD == 
    711711 * 存在しないメソッドをコールしたときに呼ばれるメソッドの定義ができる 
     712   * 以下は,これを利用した getter/setter の実装 
    712713{{{ 
    713714#!perl 
     
    716717 
    717718package Hoge; 
    718  
    719 our $AUTOLOAD; 
    720719 
    721720sub new { 
     
    723722} 
    724723 
    725 sub huge { 
    726     my $self = shift; 
    727     return "huge"; 
    728 } 
    729  
    730724sub AUTOLOAD { 
    731     my $self = shift; 
    732     ( my $method = $AUTOLOAD ) =~ s/.*://g; 
    733     return "AUTOLOAD: $method"; 
    734 } 
     725    my $self   = shift; 
     726    my $value  = shift; 
     727    my $method = our $AUTOLOAD; 
     728 
     729    $method =~ s/.*:://o; 
     730 
     731    if ( $method =~ /^get_(.+)/ ) { 
     732        return $self->{$1}; 
     733    } 
     734    elsif ( $method =~ /^set_(.+)/ ) { 
     735        $self->{$1} = $value; 
     736        return; 
     737    } 
     738    elsif ( $method eq 'DESTROY' ) { 
     739        return; 
     740    } 
     741 
     742    die sprintf( "Can't locate object method \"%s\" via package \"%s\" at %s line %u.\n", 
     743                 $method, __PACKAGE__, __FILE__, __LINE__ ); 
     744} 
     745 
    735746 
    736747package main; 
    737748 
    738 my $hoge = new Hoge(); 
    739 print $hoge->hoge(), "\n"; 
    740 print $hoge->huge(), "\n"; 
     749use Data::Dumper; 
     750 
     751if ( __FILE__ eq $0 ) { 
     752    exit( &main(@ARGV) ); 
     753} 
     754 
     755sub main { 
     756    my $hoge = new Hoge(); 
     757 
     758    $hoge->set_hoge("unko"); 
     759    print $hoge->get_hoge(), "\n"; 
     760    print Dumper($hoge); 
     761 
     762    return 0; 
     763} 
    741764}}} 
    742765   * 実行結果 
    743766{{{ 
    744 $ perl Hoge.pm  
    745 AUTOLOAD: hoge 
    746 huge 
     767#!sh 
     768$ perl ./hoge.pl 
     769unko 
     770$VAR1 = bless( { 
     771                 'hoge' => 'unko' 
     772               }, 'Hoge' ); 
    747773}}} 
    748774