2016-05-13 6 views
1

例:

foreach my $var (@$tp) 
     { 
     my $sql=$startsql1.$var.$endsql1; 
     print " SQL stamt \n $sql \n"; 
     my $sel_stmt=$dbh->prepare($sql); 
     $sel_stmt->execute() or warn $DBI::errstr; 
     my @result = $sel_stmt->fetchrow_array(); 
     $sel_stmt->finish(); 
     $tphash{$result[0]} = [ @result ];   
    } 
  • @tpが配列です。私は$ varを出力するときに出力を出すことはありません。
+1

'$のtp'は配列への参照である@ $ tp'デリファレンス'ので、それを配列にします。 – rbm

+0

このコードのどこにでも '@ tp'配列はありません。あなたはコードのどこかに '@ tp'を持っていて、このループの中で反復しようとしていますか?もしそうなら、誤って '@ tp'を入力したところで' @ $ tp'と打ちました。あなたが書いたすべてのPerlプログラムの先頭に 'use strict;'と 'use warnings;を入れてください。 –

答えて

11

@$は可変ではありません。これは逆参照です。

$tpは配列への参照です。 @$tpは "参照を解除して値を教えてください"と言うと、@{$tp}と書くこともできます。

例:

my @array = (1, 2, 3); 
my $array_ref = \@array; 
print "REF: ", $array_ref,"\n"; 
print "VALUES: ", join " ", @$array_ref; 

あなたは角括弧によって実際の配列を持たずに配列リファレンスを作成することができます。

my $array_ref = [ 1, 2, 3 ]; 
+0

ありがとうたくさんの男:) –

+0

@DipitSethi答えを検証する必要があります(左側のチェックマーク)。 – nanocv

+0

ねえ、これで助けてくれますか?> DBD :: SQLAnywhereの初期化に失敗しました:DBD :: SQLAnywhere->ドライバがハンドルを返さなかったので、私のコードを実行しています。 db接続を持つ別のコード。私も同じ質問をしている。 –

関連する問題