Changes between Version 2 and Version 3 of Perl


Ignore:
Timestamp:
08/09/06 19:16:51 (18 years ago)
Author:
atzm
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Perl

    v2 v3  
    163163        }; 
    164164}}} 
     165 
     166=== オブジェクトの永続化 === 
     167当然のことながら,展開先ソースコードが必要になる. 
     168 
     169 * object.pm 
     170{{{ 
     171#!perl 
     172#!/usr/bin/perl 
     173 
     174use strict; 
     175use diagnostics; 
     176use warnings; 
     177 
     178package object; 
     179 
     180sub new { 
     181        my $class = shift; 
     182        bless { "1" => "hogera" }, $class; 
     183} 
     184 
     185sub unko { 
     186        my $self = shift; 
     187        return $self->{"1"}; 
     188} 
     189 
     1901; 
     191 
     192__END__ 
     193}}} 
     194 
     195 * freeze.pl 
     196{{{ 
     197#!perl 
     198#!/usr/bin/perl 
     199 
     200use strict; 
     201use diagnostics; 
     202use warnings; 
     203use Storable qw(nfreeze); 
     204use object; 
     205 
     206my $obj = new object; 
     207 
     208my $serialized = nfreeze($obj); 
     209print r_escape($serialized); 
     210 
     211sub r_escape { 
     212    my $s = shift; 
     213    $s =~ s/([%\r\n])/sprintf("%%%02X", ord($1))/ge; 
     214    return $s; 
     215} 
     216}}} 
     217 
     218 * thaw.pl 
     219{{{ 
     220#!perl 
     221#!/usr/bin/perl 
     222 
     223use strict; 
     224use diagnostics; 
     225use warnings; 
     226use Storable qw(thaw); 
     227use object; 
     228 
     229my $str = ""; 
     230$str .= $_ while (<>); 
     231 
     232my $obj = thaw(r_unescape($str)); 
     233print $obj->unko(), "\n"; 
     234 
     235sub r_unescape { 
     236    my $s = shift; 
     237    $s =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/ge; 
     238    return $s; 
     239} 
     240}}} 
     241 
     242 * 実行結果 
     243{{{ 
     244#!sh 
     245$ ./freeze.pl | ./thaw.pl  
     246hogera 
     247}}}