7ϤΥץ륳
---------------------
ܼʥڡֹ
P142-1
P142-2
P143
P144
P145
P148
P149
P150
P151
P156
P157
P158
P162-1
P162-2
P163-1
P163-2
P163-3
P164-1
P164-2
P165
P168
P169
P170
---------------------

P142-1
# hello֥롼θƤӽФ
#  hello.pl

# ֥롼ƤӽФ
&hello( );

# ֥롼
sub hello {
  print "ˤϡϥ֥롼Ǥ\n";
}

P142-2
# hello_arg֥롼θƤӽФ
#  hello_arg.pl

# ֥롼ƤӽФ
&hello_arg("Ϻ");

# ֥롼
sub hello_arg {
  my($name) = @_;
  print "ˤϡ$nameǤ\n";
}

P143
# ͤhello_ret֥롼θƤӽФ
#  hello_ret.pl

# ֥롼ƤӽФ
$string = &hello_ret("ֻ");

# ͤɽ
print ": $string";

# ֥롼
sub hello_ret {
  my($name) = @_;
  # ʸ֤
  "ˤϡ$nameǤ\n";
}

P144
# returnؿȤä֤ͤ
#  hello_return.pl

# ֥롼ƤӽФ
$string = &hello_return("ֻ");

# ͤɽ
print ": $string";

# ֥롼
sub hello_return {
  my($name) = @_;
  # ʸ֤
  return("ˤϡ$nameǤ\n");
}

P145
# ϥΥ
#  hanoi.pl

# ֥롼ƤӽФ
&hanoi(3, "", "", "");

# ֥롼
sub hanoi {
  my($disk, $bar1, $bar2, $bar3) = @_;
  
  # פ1İʾĤäƤ
  if ($disk > 0) {
    # ƵƤӽФ1
    hanoi($disk - 1, $bar1, $bar3, $bar2);
    
    # ưƤɽ
    print " $disk  $bar1  $bar2 ˰ư\n";
    
    # ƵƤӽФ2
    hanoi($disk - 1, $bar3, $bar2, $bar1);
  }
}

P148
# localmyΥƥ
#  local_my.pl

# ֥롼ƤӽФ
&local_my( );

# ֥롼
sub local_my {
  # localˤ
  local($local_value) = "Ϻ";

  # myˤ
  my($my_value) = "ֻ";

  # ̥֥롼ƤӽФ
  &echo_local_my( );
}

# ֥롼󤫤ƤӽФ̥롼
sub echo_local_my {
  # localmyͤɽ
  print "localˤ: $local_value\n";
  print "myˤ: $my_value\n";
}

P149
# local줿ѿͤѹ
#  modify_local.pl

# ֥롼ƤӽФ
&modify_local( );

# ֥롼
sub modify_local {
  # 
  local($local_value) = "Υƥ";
  # 
  my($my_value) = "Υƥ";

  print "[¹]\n";
  print "local:\t$local_value\n";

  print "my:\t$my_value\n";

  &change_local( );

  print "[¹Ը]\n";
  print "local:\t$local_value\n";
  print "my:\t$my_value\n";
}

sub change_local {
  $local_value = "ѹޤ";
  $my_value = "ѹޤ";
}

P150
# ֥åǤΥѿ
#  block.pl

$variable = "Х";

print "֥롼¹: $variable\n";

# ֥롼ƤӽФ
&block( );
print "֥롼¹Ը: $variable\n";

# ֥롼
sub block {
  my($variable) = "";
  print "\t֥å: $variable\n";
  {
    my($variable) = "֥å";
    print "\t\t֥å: $variable\n";
  }
  print "\t֥å: $variable\n";
}

P151
# ourmyΥƥ
#  our_scope.pl

# Хѿ
@global_value = (1, 2, 3);

&modify_my( );
print "[my] ", @global_value, "\n";

&modify_our( );
print "[our] ", @global_value, "\n";

# myˤ륰Хѿξ
sub modify_my {
  my(@global_value);
  print "[my] ", @global_value, "\n";
  @global_value = ("A", "B", "C");
  print "[myѹ] ", @global_value, "\n";
}

# ourˤ륰Хѿξ
sub modify_our {
  our(@global_value);
  print "[our] ", @global_value, "\n";
  @global_value = ("A", "B", "C");
  print "[ourѹ] ", @global_value, "\n";
}

P156
# 顼ѿΥե
#  reference.pl

$string = "ϺǤ";

# ֥롼¹
print "¹: $string\n";

# ե󥹤Ϥƥ֥롼¹
&sub_reference(\$string);

# ֥롼¹Ը
print "¹Ը: $string\n";

# ֥롼
sub sub_reference {
  # ե󥹤
  my($reference) = @_;

  # ե󥹤Υ顼ѿƤѹ
  $$reference =~ s/Ϻ/ֻ/;
}

P157
# Υե
#  reference_array.pl

@array = (1 .. 5);

# ֥롼¹
print "¹: ", join(", ", @array), "\n";

# ե󥹤Ϥƥ֥롼¹
&sub_reference_array(\@array);

# ֥롼¹Ը
print "¹Ը: ", join(", ", @array), "\n";

# ֥롼
sub sub_reference_array {
  # ե󥹤
  my($reference_array) = @_;

  # ե󥹤Ƥѹ
  for ($i = 0; $i < @$reference_array; $i++) {
    $$reference_array[$i]++;
  }
}

P158
# ̵֥̾롼ͤľܼ
#  hello_anonymous.pl

# ̵֥̾롼
$string = sub {
  # ʸ֤
  return("ˤϡ$nameǤ\n");
};

# ͤɽ
$name = "ֻ";
print ": ", &$string;

P162-1
# hello饤֥
#  hello_lib.pl

# ֥롼
sub hello {
  my($name) = @_;
  print "ˤϡ$name\n";
}

# 
1;

P162-2
# hello_libθƤӽФ
#  hello_call.pl

# 饤֥θƤӽФ
require("hello_lib.pl");

# ֥롼θƤӽФ
&hello("Ϻ");

P163-1
# եɤ߹
#  config_load.pl

# 
$name = "ƿ̾";

# ե¸ߥå
if (-r "config") {
  require("config");
}

print "ˤϡ$name\n";

P163-2
# ե
#  config

$name = "Ϻ";
1;

P163-3
# BEGINENDΥƥ
#  begin_end.pm

# BEGIN롼
BEGIN {
  print "⥸塼򳫻Ϥޤ\n";
}

# END롼
END {
  print "⥸塼λޤ\n";
}

1;

P164-1
# begin_end⥸塼ɤ߹
#  begin_end_call.pl

print "⥸塼ƤӽФ\n";

# ⥸塼ƤӽФ
use begin_end;
print "ᥤ롼νλ\n";

P164-2
# ѥåhello⥸塼
#  hello_package.pm

# helloȤ̾ǥѥå
package hello;

# Υ֥롼hello::helloȤƸƤӽФ
sub hello {
  my($name) = @_;
  print "ˤϡ$name\n";
}

1;

P165
# hello_packageƤӽФ
#  hello_package_call.pl

# ѥåƤӽФ
use hello_package;

# ѥå̾դ˸ƤӽФ
&hello("Ϻ");

# ѥå̾դƸƤӽФ
&hello::hello("Ϻ");

# Ʊ̾Υ֥롼
sub hello {
  my($name) = @_;
  print "褦ʤ顢$name\n";
}

P168
# File::CopyȤäƥե򥳥ԡ
#  copy.pl

# ⥸塼ƤӽФ
use File::Copy;

if (@ARGV != 2) {
  # 2İʳΤȤˤϻȤɽ
  &usage( );
}

# ⥸塼Υ롼¹
copy($ARGV[0], $ARGV[1]);

print "ԡ˥顼ȯޤ($!)\n" if ($!);

# Ȥɽ
sub usage {
  print <<EOT
copy.pl: եΥԡ

 copy.pl ԡե̾  ԡե̾
EOT
  ;
  exit(1);
}

P169
# ٥ޡ
#  benchmark.pl

# ⥸塼ƤӽФ
use Benchmark;

# 1ܤΥ٥ޡ֥
$before_time = new Benchmark;

# 50000Ȥη׻
&recursive(50000);

# 2ܤΥ٥ޡ֥
$after_time = new Benchmark;

# 2ĤΥ٥ޡ̤
$diff = timediff($after_time, $before_time);

# ɽ
print ": ", timestr($diff), "\n";

# ֤¬뤿κƵƤӽФ
sub recursive {
  my($number) = @_;

  # 1Ĥĥ󥿤򸺤餷0ˤʤޤǺƵƤӽФԤ
  &recursive(--$number) if ($number);
}

P170
# UTF-8ѿ̾Ȥ
#  utf8_consumption_duty.pl

# ⥸塼ƤӽФ
use utf8;

$Ψ = 0.05;

print "subtotal: ";

$׶ = <STDIN>;
chomp($׶);

$ǳ = $׶ * $Ψ;

$׶ = $׶ + $ǳ;

print "tax: ${ǳ} yen\n";
print "total amount: ${׶} yen\n";
