0

さて、この質問はしばらくの間私を悩ませてきました。データベースに接続し、クエリから値を返すモジュールを実行しています。モジュールを呼び出し、モジュールのサブルーチンから値を返そうとしているスクリプトがあります。しかし、コードは単語よりも優れているので、ここに私が持っているものがあります:

sub selectCustomerName ($code){
    connectDB() or die "Failed in subroutine";
    #Selects customer name from customer table where code is $code
    my $selectName = "SELECT * FROM customers WHERE code = ?";
    my $sth = $dbh->prepare($selectName);
    $sth->execute($code);
my $hash = $sth->fetchrow_hashref;
$hash->{customer_name} = $name;
return $name;
$sth ->finish();
$dbh->disconnect();
}

これが私のモジュールです。これが私のスクリプトです。

#!/usr/bin/perl
require Connect;
use warnings;
my $dbh = Connect::connectDB();
my $results = Connect::selectCustomerName('38d');
print $results;

多くの混乱と変数の切り替えから、0とハッシュ参照を出力するようになりましたが、ハッシュの実際の値は出力されません。どんな助けでも大いに感謝します!

4

2 に答える 2

1

いくつかの間違いがあります。これを試して:

use strict; use warnings; # never forget this 2 pragmas
use Data::Dumper; # print what's inside data structures or object

sub selectCustomerName {
    my $code = shift; # or my ($code) = @_; 

    connectDB() or die "Failed in subroutine";
    #Selects customer name from customer table where code is $code
    my $selectName = "SELECT * FROM customers WHERE code = ?";
    my $sth = $dbh->prepare($selectName);
    $sth->execute($code);
    my $hash = $sth->fetchrow_hashref;
    print Dumper $hash;
    $name = $hash->{customer_name};
    $sth ->finish();
    $dbh->disconnect();
    return $name;
}
  • の後にfinish()&を置くと、それらは呼び出されません。disconnect()return
于 2012-06-28T13:38:45.237 に答える
0

実際に何があるかを確認する最も簡単な方法は、おそらくData::Dumperを使用することです。

#!/usr/bin/perl

use strict;
use warnings;

require Connect;
use Data::Dumper;

my $dbh = Connect::connectDB();
my $results = Connect::selectCustomerName('38d');
print Dumper $results;

ただし、ハッシュ参照がある場合は、それを%{$hash_ref}使用してそれを参照し、他のハッシュを使用するのと同じように使用できます。

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

require Connect;

my $dbh = Connect::connectDB();
my $results = Connect::selectCustomerName('38d');

foreach (keys %{$results}) {
  say "Key: $_, Value: $results->{$_}";
}
于 2012-06-28T13:56:39.943 に答える