2013-12-13 4 views
0

Я новичок в Perl и Eclipse, и я пытаюсь соединить мой сценарий Perl в моей базе данных, но это дает мне сообщение об ошибке: «Файл не существует»Как подключиться к базе данных в Perl

#!/usr/bin/perl 

use XML::Simple; 
use DBI; 
use strict; 
use Data::Dumper; 
use constant {false=>0,true=>1}; 

my ($exec_dir, $exec_file) = 
(Win32::GetFullPathName($0) =~ /^(.*)\\([^\\]*)$/); 

my $parmfil = $exec_dir . "\\parms\\parms.xml"; 
my $p_ref = XMLin($parmfil); 

my ($dsn,$dbusr,$dbpwd) = ($p_ref->{"DSN"} 
          ,$p_ref->{"db_user"} 
           ,$p_ref->{"db_pwd"} 
); 
my $dbh = DBI->connect( "dbi:ODBC:$dsn", $dbusr, $dbpwd) 
     or die "SDM Database connect error - $DBI::errstr\n"; 
$dbh->{LongReadLen} = 1024 * 1024; 

if (true) 
{ 
    print "true\n"; 
} 

Пожалуйста, помогите мне.

+0

Какой файл не существует? Должен быть номер строки, который расскажет вам, где проблема. Единственный файл, который я вижу, - это XML-файл, и я не совсем понимаю, что это касается баз данных или Exclipse. –

+0

этот файл: my $ parmfil = $ exec_dir. "\\ Parms \\ parms.xml"; и это – mo0108

+0

Так оно существует? Распечатайте полный путь и сообщите нам. Затем проверьте это с помощью '-e $ parmfil' http://perldoc.perl.org/functions/-X.html –

ответ

-2

Попробуйте этот код:

use strict; 
use FindBin qw($Bin); 

my $parmfil = $Bin . "/parms/parms.xml"; 
my $p_ref = XMLin($parmfil); 
+0

dirname ($ 0). «/parms/parms.xml» будет работать так же хорошо. Общее opionion заключается в [избегать FindBin] (http://www.perlmonks.org/?node_id=41213) – runrig

+0

Ошибка FindBin, о которой вы говорите, была исправлена ​​в 2011 году – gangabass

-1

Это dosn't выглядеть правильно

my ($exec_dir, $exec_file) = 
(Win32::GetFullPathName($0) =~ /^(.*)\\([^\\]*)$/); 

GetFullPathName в списке Contect будет возвращать путь к файлу и имя файла, как вам требуется, но матч выражение reguler изменит, не может видеть, что это необходимо. Если вы хотите манипулировать дорожкой, тогда подумайте, что лучше всего сделать это после того, как значения будут возвращены.

+0

Это действительно работает. Попробуйте. – reinierpost

+1

Он работает, но не нужен. Регулярное выражение вызывает его в скалярном контексте, возвращая полный путь/файл в виде одного скаляра, при этом регулярное выражение разделяет его. W/O регулярное выражение, которое будет вызываться в контексте списка, и вернуть путь/файл в виде отдельных элементов, не требуется никакого регулярного выражения. – runrig

+0

True____________. – reinierpost

1

Я больше склонен доверять Perl, что файл не существуют, чем ваши гарантии того, что он делает !

Вы должны напечатать значение $parmfil и посмотреть, действительно ли это то, что вы ожидаете.

Вы также можете добавить

print "\$parmfil %s exist\n", -f $parmfil ? 'DOES' : 'DOESN'T'; 

, чтобы получить "второе мнение".

Смежные вопросы