アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のperlスクリプトで、どちらも私には同じ結果をもたらすものだと
予想していたのですが、出力結果が異なってしまいます。
なぜ script1 ではエラーなしで動作するのに、script 2では
エラーが出るのでしょうか。
$$xx が d になり、 $$yy が ARRAY(0x180c460) となる理由も
わかりません。
稚拙な質問で申し訳ありませんが、どなたかよろしくお願いしますm(_ _)m

## script 1 とします。
my $xx = \qw(a b c d);
print "$$xx \n"; # d と出力される
print "xx is $$xx \n"; # xx is d と出力。

## script 2 とします。
my @array = qw(a b c d);
my $yy = \@array;
print "$yy \n"; # ARRAY(0x180c460) と出力される。
print "yy is $$yy \n"; # Not a SCALAR reference at tryme.pl line 11. とエラーになる。

A 回答 (4件)

多分, qw(a b c d) と ('a', 'b', 'c', 'd') と同じということで \qw(a b c d) と (

    • good
    • 0
この回答へのお礼

ありがとうございます!
謎が氷解しました。

お礼日時:2009/02/03 00:28

ああ, (\'a' \'b' \'c' \'d') はもちろん (\'a', \'b', \'c', \'d') です. これがさ

    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。
素人にはこういった補足がとても救いになります。
どうもありがとうございました。

お礼日時:2009/02/03 00:31

確かにそうですね。



my@xx= \qw(a b c d);
print map($$_, @xx), "\n"; # "abcd" と出力

文法的にはNo.2さんのおっしゃる通りみたいです。

これは私も勉強になりました。 \qw(a b c d) の代りに [qw(a b c d)] と書きましょう。
    • good
    • 0
この回答へのお礼

最後のコメント部分がすごく助けになりました。
ありがとうございました!

お礼日時:2009/02/03 00:29

>$$yy が ARRAY


なってませんけどー
script 1の$$xxは$xxの間違いですか

この回答への補足

申し訳ありません。
訂正させてください。 $$xx は $xxの間違いでした。
もう一度、以下に質問を書き直させてください。
本当にすいません。

## script 1 とします。
my $xx = \qw(a b c d);
print "$xx \n"; # SCALAR(0x1801180) と出力される。
print "xx is $$xx \n"; # xx is d と出力。

## script 2 とします。
my @array = qw(a b c d);
my $yy = \@array;
print "$yy \n"; # ARRAY(0x180c460) と出力される。
print "yy is $$yy \n"; # Not a SCALAR reference at tryme.pl line 11. とエラーになる。

$xx と $yy が異なる理由と、$$xx と$$yy が異なる理由が
いまいちわかりません。。
片方はスカラー、片方はアレイ扱いになっているようですが。。
どう解釈すればよいのでしょうか。

補足日時:2009/02/02 19:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!