pop
およびコマンドはpush
、アレイの最後のエントリ全体を追加または削除します。これら (およびそのパートナー、unshift
およびshift
) は、個々のキャラクターには作用しません。
このchomp
コマンドは のみを削除し\n
ます。ファイルから行を読み取るときに文字chop
を削除する標準的な手段としてコマンドを置き換えるために、Perl 4.0 で追加されました。\n
これはchomp
、最後の文字が . でない場合、 は文字を削除しないため\n
です。chomp
これは、末尾に があるかどうかわからない場合でも、安全に文字列を取得できることを意味します\n
。
コマンドは、chop
まさにあなたが望むことを行います。その文字が何であれ、最後の文字を削除します。Perl の以前のバージョンでは、chop
返されたものが\n
文字であることを確認するためにチェックすることになっていました。これはあなたが望むものです。
あなたが抱えている問題は、両方がスカラーコンテキストだけでなく、配列およびハッシュコンテキストでも動作することですchomp
。chop
ハッシュと配列のコンテキストでは、すべてのスカラー データを処理します (ただし、ハッシュのキーは処理しません)。結局のところ、ファイル全体を読み込む場合、これはほとんど私が望むものです:
my @file_data = <$file_fh>; #Reads in the entire file into an array
chomp @file_data; #Removes all `\n` in one fell swoop
だから、あなたがするとき:
chop @my_array;
これは、実際に必要なことではなく、Perl が必要だと考えていることを実行しています。つまり、配列の最後のエントリから最後の文字だけを削除します。
あなたがしたいことは、その配列の最後のエントリだけを指定し、それをむさぼり食うことです。これを行うには、次の 2 つの方法があります。
$my_array[ $#my_array ];
$my_array[ -1 ];
$#my_array
1 つ目は、配列内の最後のエントリのインデックスと等しいという事実を使用します。2 つ目は、負のエントリが配列の末尾を反映する Perl ショートカットを使用します。
$my_array[-1]; #Last entry of the array
$my_array[-2]; #Second to the last entry
Perl スクリプトでは、両方の方法が見られます。chop
これで、配列の最後のエントリだけで使用できます。
chop $my_array[-1];
chop $my_array[ $#my_array ];