1. ホーム
  2. スクリプト・コラム
  3. パール
  4. アプリケーションのヒント

スペースがセパレータである場合の perl qw 問題の解決法

2022-01-29 03:08:07

qwは、perlで配列を作成する際に使用することができます。

しかし、20人の名前の配列を作成したい場合、それぞれの名前が "Join smith" "Harry Potter" という形式、つまりそれぞれの名前に姓と名の両方が含まれていると問題が発生します。このとき、qwは動作しません。qwはスペースをセパレータとして使用するからです。

以下にいくつかの代替策を示しますので、参考にしてください。

解決策1

配列の作成には、最も原始的なスキームである二重引用符を使用します。

コピーコード コードは以下の通りです。

@names=("Join smith","Harry Potter"); 
print @names[0];

その結果は以下の通りです。
F:\>perlb.pl 
スミスへの参加 
F:ⅯⅯⅯ

オプション2

簡単な回避策があります。qwはスペースでしか区切れないので、人名の真ん中にあるスペースを他の文字に置き換えてみましょう。
名前=qw/Join_smith Harry_Potter/; 
# そして出力時に中央のジョイナーを置き換えます 

コピーコード コードは以下の通りです。

@names[0]=~s/_/ /g; 
print @names[0];

その結果は以下の通りです。
F:\>perlb.pl 
スミスへの参加 
F:ⅯⅯⅯ

オプション3

分割機能を使って作成する。

コピーコード コードは以下の通りです。

# First we define a variable 
$names="Join smith,Harry potter", 
# Here you use the split function, where split // between the two slashes is where you want to split, in this case with a comma as the split boundary 
my @names=split/,/,$names; 
rint @names[0];

その結果は以下の通りです。
F:\>perlb.pl 
スミスへの参加 
F:ⅯⅯⅯ