あなたがそれをしたい方法ではありません。実際、あなたがしている$snap->snapshot_id
のは(のように)メソッドを呼び出すことですsub
。Perlは、二重引用符で囲まれた文字列内ではそれを行うことができません。変数を補間します$snap
。それがそれであるHASH(0x1234567)
ため、それは次のようなものになります:bless
ハッシュのed参照。
補間はスカラー(および配列)でのみ機能しますが、それは省略します。行ってもいい:
print "$foo $bar"; # scalar
print "$hash->{key}"; # scalar inside a hashref
print "$hash->{key}->{moreKeys}->[0]"; # scalar in an array ref in a hashref...
ただし、これを行う方法は1つあります。ここで行うように、引用符で囲まれた文字列内で参照および逆参照できます。
use DateTime;
my $dt = DateTime->now();
print "${\$dt->epoch }"; # both these
print "@{[$dt->epoch]}"; # examples work
しかし、それはかなり醜いように見えるので、私はそれをお勧めしません。代わりに最初のアプローチを使用してください!
それがどのように機能するかにまだ興味がある場合は、これらのPerlFAQも参照することをお勧めします。
perlrefから:
サブルーチン呼び出しを文字列に補間するための秘訣は次のとおりです。
print "My sub returned @{[mysub(1,2,3)]} that time.\n";
それが機能する方法は、@ {...}が二重引用符で囲まれた文字列に表示されると、ブロックとして評価されるというものです。このブロックは、mysub(1,2,3)への呼び出しの結果を含む匿名配列への参照を作成します。したがって、ブロック全体が配列への参照を返します。配列は@ {...}によって逆参照され、二重引用符で囲まれた文字列に固定されます。このchicaneryは、任意の表現にも役立ちます。
print "That yields @{[$n + 5]} widgets\n";
同様に、スカラーへの参照を返す式は、${...}を介して逆参照できます。したがって、上記の式は次のように書くことができます。
print "That yields ${\($n + 5)} widgets\n";