2011年6月21日火曜日

開発環境

  • Mac OS X Snow Leopard (OS)
  • TextWrangler(Text Editor) (いずれはBBEditを入手したい!)
  • Script言語:Perl

『初めてのPerl 第5版』(Randal L. Schwartz, Tom Phoenix, brian d foy 共著、近藤 嘉雪 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-427-9) の10章(さまざまな制御構造), 10.11(練習問題)、3を解いてみる。

 

3.

やり方の1つ。(「やり方は何通りもある」(TIMTOWTDI(There Is More Than One Way To Do It.)))

改造する前の、6章の問題3のプログラム(環境変数を表示するもの)

perl 5.10を使っている場合(defined-or演算子、//を使うバージョン)

コード(TextWrangler)

#!/usr/bin/perl

use 5.010;

use strict;
use warnings;

# このプログラムを実行したら全ての環境変数は
# 値を持っていたので値を持たない環境変数を追加
$ENV{UNDEFINED}=undef;

# 追加点を得るためにキーの長さの値の最大値を求める
my $max_length=0;
foreach (keys %ENV){
  if($max_length<length($_)){
    $max_length=length($_);
    }
}

# %ENVのすべてのキーとその値を表示
# 結果は2カラムでキーをソートしてASCIIコード順に表示
foreach (sort(keys %ENV)){
  # 改造した箇所
  $ENV{$_}=$ENV{$_} // "undefined value";
  printf "%-${max_length}s %s\n",$_,$ENV{$_};
}

入出力結果(Ternimal)

perl 5.10を使っていなくて三項演算子、?:を使う場合。

コード(TextWrangler)

#!/usr/bin/perl

use 5.010;

use strict;
use warnings;

# このプログラムを実行したら全ての環境変数は
# 値を持っていたので値を持たない環境変数を追加
$ENV{UNDEFINED}=undef;

# 追加点を得るためにキーの長さの値の最大値を求める
my $max_length=0;
foreach (keys %ENV){
  if($max_length<length($_)){
    $max_length=length($_);
    }
}

# %ENVのすべてのキーとその値を表示
# 結果は2カラムでキーをソートしてASCIIコード順に表示
foreach (sort(keys %ENV)){
  # 改造した箇所
  $ENV{$_}=defined $ENV{$_}?
            $ENV{$_}:
            "undefined value";
  printf "%-${max_length}s %s\n",$_,$ENV{$_};
}

入出力結果(Terminal)

上記の2つのプログラムとも、ちゃんと値を持っていない(undef)の環境変数UNDEFINEDはundefined valueという値に設定された。

ファイルの用意が必要な場合はO'Reilly Japan - 初めてのPerl 第5版の関連ファイルのプログラム例に含まれているものを使用しています。

0 コメント:

コメントを投稿