Go to the first, previous, next, last section, table of contents.


文字列関数

Function: chomp variable
Function: chomp list
Function: chomp
少しばかり安全な chop (以下を参照してください) です。$/ (English モジュールでは、$INPUT_RECORD_SEPARATORとも言う) のその時点の値に対応す る行末文字を削除します。削除した文字数を返します。入力レコードから、改行 を削除したいのだけれど、最後のレコードには改行が入っているのかわからない ような場合に、使用することができます。段落モード ($/ = "") では、レコー ドの最後の改行をすべて取り除きます。variable が省略されると、$_ を 対象として chomp します。例:
while (<>) {
    chomp;  # 最後のフィールドの \n を避ける
    @array = split(/:/);
    ...
}

左辺値であれば、代入を含めて、任意のものを chomp できます:

chomp($cwd = `pwd`);
chomp($answer = <STDIN>);

リストを chomp すると、個々の要素が chomp され、削除された 文字数の合計が返されます。

Function: chop variable
Function: chop list
Function: chop
文字列の最後の文字を切り捨てて、その切り取った文字を返します。主に、入力 レコード末の改行を削除するために使われますが、文字列の検索もコピーも行な いませんので s/\n// よりも、ずっと効率的です。variable が省略され ると、$_ を対象として chop します。例:
while (<>) {
    chop;   # 最後のフィールドの \n を避ける
    @array = split(/:/);
    ...
}

左辺値であれば、代入を含めて、任意のものを chop できます:

chop($cwd = `pwd`);
chop($answer = <STDIN>);

リストを chop すると、個々の要素が chop されます。最後の chop の値だけが返されます。

Function: crypt plaintext,salt
C ライブラリの crypt(3) 関数と全く同じように、文字列を暗号化します。パス ワードファイルの中で、あまり良くないものをチェックするために使うことがで きます。公正な人だけが、これを行なうべきです。

プログラムを実行する人が、自分のパスワードを知っていることを確認する例で す:

$pwd = (getpwuid($<))[1];
$salt = substr($pwd, 0, 2);

system "stty -echo";
print "Password: ";
chop($word = <STDIN>);
print "\n";
system "stty echo";

if (crypt($word, $salt) ne $pwd) {
    die "Sorry...\n";
} else {
    print "ok\n";
}

もちろん、聞かれれば、誰にでもパスワードを打ってあげるなんてのは、もって のほかです。

Function: eval expr
Function: eval block
expr が Perl のプログラムであるかのように、解析し、実行します。そ の時点の Perl プログラムの脈絡の中で実行されますので、変数の設定、サブルー ティンやフォーマットの定義は、その後も残っています。返される値は、サブルー ティン同様に、最後に評価した式の値か、return 文の値です。

構文エラーや実行エラーが発生するか、die() 文が実行されると、 eval() の値として未定義値が返され、$@ にエラーメッセージが設定さ れます。エラーがなければ、$@は、空文字列であることが保証されます。EXPR を省略すると、$_ を評価します。最後のセミコロンは、式から省くことができ ます。

eval() は、致命的エラーとなるようなものをトラップすることができま すから、(dbmopen()symlink() といった) 特定の機能がイン プリメントされているかを、調べるために使うことができます。die 演算子が例 外を発生させるものとすれば、これはまた、Perl の例外捕捉機能と捉えること もできます。

実行するコードが変わらないのであれば、毎回多量の再コンパイルすることなし に、実行時エラーのトラップを行なうために、eval-BLOCK 形式を使うことがで きます。エラーがあれば、やはり $@ に返されます。例:

# 0 除算を致命的でなくす
eval { $answer = $a / $b; }; warn $@ if $@;

# 効率的ではないが、同じ
eval '$answer = $a / $b'; warn $@ if $@;

# コンパイル時エラー
eval { $answer = };

# 実行時エラー
eval '$answer =';   # $@ を設定

eval() では、何が調べられるかに、特に注意しておくこ とが必要です:

eval $x;            # CASE 1
eval "$x";          # CASE 2

eval '$x';          # CASE 3
eval { $x };        # CASE 4

eval "\$$x++"       # CASE 5
$$x++;              # CASE 6

上記の CASE 1 と CASE 2 の動作は同一で、変数 $x 内のコードを実行します。 (ただし、CASE 2 では、必要のないダブルクォートによって、読む人が何が起こ るか混乱することでしょう (何も起こりませんが)。)同様に CASE 3 と CASE 4 の動作も等しく、何もしない「$x」というコードを実行します。(純粋に見た目 の問題で、CASE 4 が好まれます。)CASE 5 の場合は、通常ダブルクォートを使 用します。この状況を除けば、CASE 6 のように、単にシンボリックリファレン スを使えば良いでしょう。

Function: lc expr
EXPR を小文字に変換したものを返します。これは、ダブルクォート文字列にお ける、\L エスケープをインプリメントする内部関数です。

Function: lcfirst expr
最初の文字だけを小文字にした、expr を返します。これは、ダブルクォー ト文字列における、\l エスケープをインプリメントする内部関数です。

Function: length expr
expr の値の文字列長を返します。expr が省略されたときには、$_ の長さを返します。

Function: q/STRING/
Function: qq/STRING/
Function: qx/STRING/
Function: qw/STRING/
汎用のクォート。See section 演算子と優先順位,を参照。

Function: quotemeta expr
expr の中のすべての正規表現のメタ文字をバックスラッシュでエスケー プしたものを返します。これは、ダブルクォート文字列での \Q エスケープをイ ンプリメントするための内部関数です。

Function: substr expr,offset,len
Function: substr expr,offset
expr から、部分文字列を取り出して返します。最初の文字がオフセット 0 もしくは、$[ に設定した値となります。offset に負の値を設定すると、 expr の終わりからのオフセットとなります。len を省略すると、 expr の最後まですべてが返されます。substr() を左辺値として 使用することも可能で、その場合には、expr が左辺値でなければなりま せん。len より短いものを代入したときには、expr は短くなり、 len より長いものを代入したときには、expr はそれに合わせて伸 びることになります。expr の長さを一定に保つためには、 sprintf() を使って、代入する値の長さを調整することが、必要になる かもしれません。

Function: uc expr
expr を大文字に変換したものを返します。これは、ダブルクォート文字 列における、\U エスケープをインプリメントする内部関数です。

Function: ucfirst expr
最初の文字だけを大文字にした、expr を返します。これは、ダブルクォー ト文字列における、\u エスケープをインプリメントする内部関数です。


Go to the first, previous, next, last section, table of contents.

検索式: