Perl - 帮助排除使用双引号和单引号的dbi语句

Perl - 帮助排除使用双引号和单引号的dbi语句

问题描述:

我想弄清楚为什么我无法让我的变量正常使用Getopt::StdPerl - 帮助排除使用双引号和单引号的dbi语句

例如在用户和密码在单引号这个perl的DBI声明,一切工作正常:

my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node",'foo-bar','mypw'); 

但我想改变这种说法,这样我可以在$一个变量传递用户,$ pw。 我使用Getopt::Std;这些值来传递:

my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node", '$user','$pw'); 

这个工程现在:

my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node", $user,$pw); 

我收到以下错误MESG:

DBI connect('database=;host=hostname','',...) failed: 

更新: 从大家输入后,对我来说排除这个问题的最好方法是看看我的变数是否被跟踪。我基本上是传递了错误的价值观。所以,我简单地用这些2值的getopts测试了dbi片断,并且没有其他任何东西,并且能够使其工作。

+1

显示你如何设置$ user和$ pw;双引号版本应该工作(应该只是通过'... = 3306“,$ user,$ pw)' – ysth 2011-05-10 05:59:43

您没有显示所有错误消息,但是您显示的部分似乎对用户名有空值。你确定你的$user$pw实际上是在你的程序中正确设置的吗?

+0

I我正在使用Getopt传递变量,我的程序一直在工作,直到我添加了传递给用户和pw的选项,现在如果我在程序外部传递它,我无法读取它的值 – jdamae 2011-05-10 06:10:29

+3

Right。尝试设置' $ user'和'$ pw',看看你的'DBI-> connect()'是否开始工作,然后关闭这个问题并创建一个显示你如何使用Getopt的方法 – LHMathies 2011-05-10 06:34:46

+0

谢谢。我正在测试这个,并将重写这个问题的清晰。我很欣赏这些意见。 – jdamae 2011-05-10 06:51:34

引号是多余的(…306", $user, $pw)会解析为相同的东西),但是如果第一个版本有效,那么问题是变量的值,而不是你如何使用它们。

+0

谢谢。 dbi仍然失败 – jdamae 2011-05-10 06:01:51

+0

仍然看不到你是如何填充'$ opt'哈希 – Quentin 2011-05-10 08:16:08

不同之处在于,当您使用双引号时,变量会在字符串中进行插值,因此最终字符串将是您在变量中的值。 使用单引号时,最终的字符串不会被变量值插值,所以无论$ user变量的值如何,它都是'$ user'。

+0

谢谢。看看我的编辑。我尝试了一些东西,如'$ user'或$ user,但是dbi仍然失败。 – jdamae 2011-05-10 06:01:33

my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node;mysql_compression=1;port=3306", $user,$pw); 

应该工作,前提是$dbsrc$node$user$pw设置是否正确。你的错误信息的其余部分是什么?

my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node;mysql_compression=1;port=3306", '$user','$pw'); 

不起作用,因为单引号引起的文本字符串“$ user”和“$私服”被作为登录凭据,而不是变量$user$pw的值发送。