2

引用では、変数を他のテキストからどのように分離できますか:

例、「YellowBrick」を印刷したい:

my $var = 'Yellow';

print "$varBrick";

# $varBrick not defined!!

以下を使用できます。

print "@{[$var]}Brick"

私が理解できないのは構文です@{[]}.1つの変数をエスケープするたびに5文字すべて( )が必要ですか? @ {} または [] の意味はありますか? これは配列を作成してから、aarray などへの参照を作成していますか?

基本的に私の質問は、@{[]}

ありがとう!

4

4 に答える 4

8

@{[...]}必要ありません。あなたは単に必要です

print "${var}Brick";

また

print $var."Brick";

"@{ EXPR }"式によって返された参照によって参照される配列を補間します。

[ LIST ]配列コンストラクターです。括弧内のリストを配列に割り当てることによって初期化された新しい配列への参照を返します。

この意味は

"@{[$var]}Brick"

と同じです

"@{ my @anon = $var; \@anon }Brick"

明らかに、上で紹介したソリューションははるかに優れています。@{[...]}文字列リテラルに Perl コードを埋め込むことができます。

"...@{[ uc($var) ]}..."

1 つのスカラーのみの場合は、次を使用することもできます。

"...${\ uc($var) }..."

とはいえ、私は不必要な参照を作成するよりも連結を使用することを好みます。

"...".( uc($var) )."..."   # The parens aren't needed here.
于 2013-03-12T06:07:11.223 に答える
2

単純なスカラーの場合、中括弧を区切り記号として使用できます。

"${var}Brick"

@{[]}任意の式の補間を可能にするハックです。文字列の外側と同様に、配列参照として @{ $x }扱い、逆参照します。無名配列参照コンストラクターです。だから定式化$x[]

"@{[ $var ] }Brick"

「文字列を作成します。最初に の値を含む無名配列参照を$var作成し、次にこの参照を の値を含む配列に変換します$var。次に、1 つの要素のその配列を文字列に補間し、その後にリテラル文字列 'Brick' を続けます。 ."

"@{[ ... ]}"は配列補間に依存しているため...、 がリスト値の場合は の対象になることに注意してください$LIST_SEPARATOR

于 2013-03-12T16:05:02.797 に答える
2

本当のトリックは、さらに補間を行うことができるということです。たとえば、@{[sprintf("%.02f",$var)]} を考えてみましょう。Aniket が暗示しているように、通常、このようなものを使用する理由はほとんどありませんが、たとえば、何かを補間するために引用符から飛び出してから戻すことができないヒアドキュメントなどで役立ちます。全体として、それはあなたのコードを理解しようとしている他の人を混乱させる可能性があるため、これを使用するのはおそらく最善の考えではありません。しかし、それは巧妙なトリックです。

于 2013-03-17T14:53:23.500 に答える
-1

なぜprint $var."brick"ですか?..シンプルにしてください:-)

于 2013-03-12T06:06:50.380 に答える