首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个名称空间返回变量的适当方法是什么::方法使用调度表

从另一个名称空间返回变量的适当方法是什么::方法使用调度表
EN

Stack Overflow用户
提问于 2016-09-02 15:18:43
回答 2查看 38关注 0票数 1

代码:

代码语言:javascript
复制
#!/usr/bin/perl

use strict;
use warnings;
use lib '/home/user/perl/lib/';

use SQLConnect;

my $db_something = SQLConnect->newConn({dns => "SOMETHING"});

my $sql_data = $db_something->select_fetchallArray();

for my $row ( @{$sql_data} ) {

    print ",";

    for my $column (@{$row}) {
        print $column . ",";
    }

    print "\n";

SQLConnect.pm (个人)

代码语言:javascript
复制
sub newConn {
    my ($class, $args) = @_;

    my $self = bless {
        dns      => $args,
        user     => myINIconfig::ini_dbUser($args->{dns}),
        password => myINIconfig::ini_dbPass($args->{dns}),
    }, $class;
}

这是使用调度表返回变量的适当方式吗?我试图返回的变量位于我的iniConfig包中,它包含一个方法来解析用户名和密码到我们的odbc.ini数据库的用户名和密码的odbc.ini文件。我收到以下错误:

不能使用字符串(“某事”)作为散列引用,而使用“严格引用”。

代码语言:javascript
复制
sub ini_dbUser {
    my $self = shift;

    my $dbh = ( $self->{dns} );

    open( INI, "$path$ini" ) || die "Can't open $ini: $!\n";

    while (<INI>) {
        chomp;

        next if /^\s*#/;    # ignore comments
        next if /^\s*;/;    # ignore ;

        if ( /^\s*[\s*(.+?)\s*]\s*$/ ) { }

        if ( /^\s*([^=]+?)\s*=\s*(.*?)\s*$/ ) {

            if ( ( $database eq $dbh ) && ( $keyword eq "username" ) ) {
                $user = $value;
                print "$user\n";
            }
        }
    }

    close(INI);
    return ($user);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-02 16:00:51

您对哈希索引的级别感到困惑

首先,构造函数newConn将被传递给哈希{dns => "SOMETHING"}$args值的引用,然后在元素dns => $args中创建对象时直接使用该引用。这意味着您将其设置为dns => {dns => "SOMETHING"},这看起来不太好

然后在调用dns时提取$argsmyINIconfig::ini_dbUser($args->{dns})元素的值,因此调用myINIconfig::ini_dbUser("SOMETHING")。但是ini_dbUser首先将该参数复制到$self,然后尝试将其用作my $dbh = ( $self->{dns} )中的哈希引用。因此,您的错误消息Can't use string ("SOMETHING") as a HASH ref

我不知道什么是正确的,但是将调用更改为myINIconfig::ini_dbUser($args)至少会让它正常工作

$self的使用意味着ini_dbUser是一种面向对象的方法,但您将其称为一个简单的函数。也许这就是问题所在吗?

票数 0
EN

Stack Overflow用户

发布于 2016-09-02 15:58:00

ini_dbUser希望传递$args (带有dns键的哈希key),而不是$args->{dns}

这看起来也不对:

代码语言:javascript
复制
my $self = bless {
    dns      => $args,

这就是设置{ 'dns' => { 'dns' => 'SOMETHING' }, ...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39295806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档