我在perl中有一个sub(由SWIG自动生成),我希望从中返回多个值。但是,我似乎得到了变量元数据而不是实际值。
sub getDate {
my $tm = *libswigperlc::MyClass_getDate;
($tm.sec, $tm.min, $tm.hour, $tm.day, $tm.month, $tm.year + 1900);
}
来电者是这样的......
my ($sec,$min,$hour,$day,$month,$year) = $s->getDate();
print "$year-$month-$day $hour:$min\n";
$ tm.year + 1900 返回所需的值。如果我将“+ 1”添加到其他值,它们也可以按原样运行。
但是
print $month;
结果
*libswigperlc::MyClass_getDatemonth
而不是
3
将值返回给调用者的最佳方法是什么?
我是新手perl用户 - 我通常使用C ++。
答案 0 :(得分:1)
让我们在这里找一个更长的答案:
首先,你使用严格和警告的pragma? (使用严格;使用警告;)他们将通过消除你的一些Perl自由来节省你很多时间(对我而言,没有他们你就会从自由中走出来进入极端无政府主义(:)。
$ tm。 sec会这样做:尝试连接$ tm和sec。那是什么秒? - 如果你使用严格的编译指示,那么sec是在调用之前某处声明的子 - 如果你没有使用严格的编译指示(我猜是这种情况),sec用作一个单词。
什么是* libswigperlc :: MyClass_getDate?它是否返回一个重载连接运算符(。)和/或添加运算符(+)的对象?如果是(并且特别是没有严格/警告编译指示),您可能会期望任何类型的结果,具体取决于重载函数的定义。通过+获得正确的结果是其中一种可能性。
这就是我想到的一切,我希望其他人也加入他们的解释或纠正我的。
答案 1 :(得分:0)
我所要做的就是按原样返回typeglob ...
sub getDate {
*libswigperlc::MyClass_getDate2;
}
现在调用者可以像这样访问成员......
my $tm = myClass->getDate();
print "Year = $tm->{year}";
至少现在我理解它已经足够了解它可以保留现状,或者根据最初的想法改变它。