3

背景: 私は Perl を初めて使用し、匿名配列であるハッシュ値をループする単純なスクリプトをいじっています。

問題配列をループできないようです。私が得るのはARRAY(0x1663b78)

コード

#!/usr/bin/perl
package Foo;
use strict "vars";

sub new {
    my $class = shift;
    my $self = {
        distro  => "",
        pkg_mgr => "",
        options => ["PHP + Apache", "PHP + Lighthttpd", "PHP + Nginx", "RubyGems + Rails", "Node JS + NPM"]
    };

    bless $self, $class;

    return $self;
}

sub print_options {
    my($self) = @_;
    foreach($self->{options}) {
        print $_ . "\n";
    }
}

my $setup = new Foo();
$setup->print_options();

use strict "vars";また、プライベート変数やパブリック変数が本当に必要ない場合に、リモートで使用するのに役立つかどうかを誰かが親切に教えてくれれば。PHPでこれを行う方法は知っていますが、Perlでこれを理解することはできません。

最後に、私が Perl を使用する理由は、最終的にサーバー (PHP を含む) 用のソフトウェアをインストールするアプリケーションを作成するためです。このスクリプトでは、コマンド ラインを介したユーザーの操作が必要になります。

4

3 に答える 3

4

$self->{options}は配列ではなく、配列への参照です。その値を反復できるようにするには、参照を解除する必要があります。

my @options = @{ $self=>{options} };
于 2013-06-24T03:13:18.897 に答える
1

以下の変更を行う必要があります。

foreach(@{$self->{options}}) {
        ^^                ^

optionsは のキーであり、arrayrefそれを使用するには逆参照する必要があります。

他の質問に関しては、特に初心者には、より一般的なプラグマのペアをお勧めします

use strict;
use warnings;
于 2013-06-24T03:13:06.757 に答える