私の変数$var
の形式は「abc.de」です。この substr は、このステートメントで正確に何をしますか:
$convar = substr($var,0,index(".",$var));
index()
ある文字列を別の文字列から検索し、その文字列のインデックスまたは位置を返します。
substr()
2 つの位置 (0 から始まる) の間の文字列の部分文字列を返します。
上記を見て、index メソッドが間違って使用されていると思われます (その定義はindex STR, SUBSTRであるため)。
index($var, ".")
「。」を見つける 「abc.de」内で「abc.de」の部分文字列を特定します
Perl substr関数の形式は次のとおりです。
substr [string], [offset], [length]
インデックスオフセットからインデックスオフセット+長さまでの文字列を返します
インデックスの形式:
index [str], [substr]
これは、str で substr が最初に出現したインデックスを返します。
so substr('abc.de', 0, index(".", $var)); は、インデックス 0 (つまり 'a') から始まり、文字列 "." が最初に出現するまでの文字数までの部分文字列を返します。
したがって、 $convar の例では「abc」が含まれます
編集: くそー、人々は速すぎる :P edit2: そしてブライアンはインデックスが間違って使用されていることについて正しい
実行して調べてみませんか?
#!/usr/bin/perl 私の $var = $ARGV[0]; 私の $index = index(".",$var); print "インデックスは $index です。\n"; 私の $convar = substr($var, 0, $index); print "convar は $convar です。\n";
一連の単語でそれを実行し、何が起こるかを確認してください。
また、次のように入力することもできます。
perldoc -f インデックス perldoc -f substr
すばらしいことに、代入の左辺として substr を使用して、部分文字列にデータを書き込むことができます。
$ perl -e '$a="perl sucks!", substr($a,5,5)="kicks ass"; print $a'
perl kicks ass!
同じ長さに固執する必要さえありません - ストリングはフィットするように拡張されます.
技術的には、これは substr を左辺値として使用することとして知られています。