Perl5で配列に多次元配列の一部を代入するには?

[上に] [前に] [次に]
ST 1999/07/14(水) 17:28:46
Perl5で
@foo = (['a','b','c'],['1','2','3','4'],['i','ii']);
こんな配列を作りました。
$foo[1][3]などとして呼び出すとうまくいきます。

この場合,
@var = @foo
は成り立ちます。

では,
@var = @foo[1]
というようなことをするにはどうすればよいでしょうか。
(やりたいことは分かりますね(^^;)
最初の例でいうと,@varの内容を('1','2','3','4')にしたいわけです。

B-Cus 1999/07/14(水) 17:41:34
@foo = (['a','b','c'],['1','2','3','4'],['i','ii']);
$bar = $foo[1];
foreach ( @$bar ){
 print "$_\n";
}
@baz = @{$foo[1]};
foreach ( @baz ){
 print "$_\n";
}

$foo[1] が指してるのは無名配列へのリファレンス。
$bar=$foo[1] は配列へのリファレンス。
@baz=@{$foo[1]} はデリファレンスしてるので、ただの配列。

たぶん。

B-Cus 1999/07/14(水) 17:50:18
ん〜なんか意味不明。書き直し。

$foo[1] が指してるのは無名配列。$foo[1] は配列へのリファレンス。
よって、$bar=$foo[1] としたとき $barも配列へのリファレンスなる。
なので、中身を見るときは @$bar とデリファレンスが必要。
一方 $foo[1] をデリファレンスすると @{$foo[1]} となる。
これはただの配列。だから @bazにそのまま代入できる。

ST 1999/07/14(水) 18:09:29
なるほど。うまく行きました。ありがとうございます。
いやぁ,「プログラミングPerl」でも買いたいのですが,金が……(^^;;

B-Cus 1999/07/14(水) 18:28:15
[[解決]]
> 「プログラミングPerl」でも買いたいのですが,金が……(^^;;
別に本を買わなくても、他で同等の知識を得られるならいいんですがね。
 http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
 http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
 http://www.kt.rim.or.jp/%7ekbk/perl5.005/index.html

しかし、
 本を買う→対価を払って知識を買う→読まねばもったいない→集中して読む
という利点があるので(誰にでもあてはまるとは言いませんが)、それなりの
書籍を買うことをお勧めします。

ST 1999/07/14(水) 18:28:24
[[解決]]
.

[上に] [前に] [次に]