使用XML::Smart,和DBI模块式遇到的一个

使用XML::Smart,和DBI模块式遇到的一个

使用XML::Smart,和DBI模块式遇到的一个
我通过XML::Smart提取出来的一个属性password,他返回的是一个XML::Smart 的OBJECT,而不是一个scalar的数据,print这个$password的值是没有问题的。

如下:
$password = $xml->{'login'}->{password};

然后:使用DBI的connect方法
$dbh = DBI->connect($conn_str, $user, $password)
or die ("Could not make connection to database: $DBI::errstr");

但是这时候会报下边:
Usage: $class->connect([$dsn [,$user [,$passwd [,\%attr]]]]) at ./trun_old_part.pl line 40

我去检查了一下DBI.pm,发现是下边的语句导致不能执行,其实也就是password不能使一个ref,现在的问题是我该如何将这个XML::Smart的字符转换成一个普通的scalar变量呢,我尝试了scalar,untie函数都不可以,我迷惑了!!大家深入知道一下吧!

Carp::croak('Usage: $class->connect([$dsn [,$user [,$passwd [,\%attr]]]])')
if (ref $old_driver or ($attr and not ref $attr) or ref $pass);




   

知道了 其实 只要$passwor.
知道了 其实 只要$password = $xml->{'login'}->{password} . '';
或者 $password = substr($xml->{'login'}->{password},0);
就可以让$password不是一个引用了
可是我首先不理解,substr为什么能接受 XML::Smart这个对象,跟一般的字串有什么区别,使用的是时候好像也没有什么区别
为什么DBI不允许password是一个reference?
XML::Smart里边所有的值都是Object::MultiType这个类型,好像跟那个TIE等等有关。不懂,郁闷!
好像C++里边什么多态之类的一样混乱