Perl - помочь в устранении неполадок в выражении dbi, которое использует двойные и одинарные кавычки - PullRequest
0 голосов
/ 10 мая 2011

Я пытаюсь выяснить, почему я не могу заставить мои переменные работать должным образом, используя Getopt::Std.

Например, в этом операторе DBI perl, где пользователь и пароль заключены в одинарные кавычки, все работает нормально:

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

Но я хочу изменить это утверждение, чтобы я мог передать переменную для $ user, $ 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);

Я получаю следующее сообщение об ошибке:

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

ОБНОВЛЕНИЕ: После получения информации от всех, лучший способ решить эту проблему для меня - посмотреть, выполняются ли мои изменения. Я в основном передавал неправильные значения. Итак, я просто протестировал кусок dbi с getopts для этих двух значений и ничего больше и смог заставить его работать.

Ответы [ 4 ]

4 голосов
/ 10 мая 2011

Кавычки являются избыточными (…306", $user, $pw) разрешит то же самое), но если первая версия работает, то проблема заключается в значениях переменных, а не в том, как вы их используете.

3 голосов
/ 10 мая 2011

Вы не показываете все сообщения об ошибках, но часть, которую вы показываете, кажется, имеет пустое значение для имени пользователя.Вы уверены, что ваши $user и $pw действительно настроены именно в этот момент в вашей программе?

0 голосов
/ 10 мая 2011
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" и "$ pw" отправляются в качестве учетных данных для входа в систему, а не значения переменных $user и $pw.

0 голосов
/ 10 мая 2011

Разница в том, что когда вы используете двойные кавычки, переменные интерполируются в строке, поэтому итоговая строка будет значением, которое вы указали в своих переменных. В одинарных кавычках окончательная строка не будет интерполироваться значением переменной, поэтому она будет иметь значение $ user, независимо от значения переменной $ user.

...