返回“引用”而不是来自sub的值?

时间:2011-08-23 03:57:21

标签: perl

我在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 ++。

2 个答案:

答案 0 :(得分:1)

让我们在这里找一个更长的答案:

  1. 首先,你使用严格和警告的pragma? (使用严格;使用警告;)他们将通过消除你的一些Perl自由来节省你很多时间(对我而言,没有他们你就会从自由中走出来进入极端无政府主义(:)。

  2. $ tm。 sec会这样做:尝试连接$ tm和sec。那是什么秒?     - 如果你使用严格的编译指示,那么sec是在调用之前某处声明的子     - 如果你没有使用严格的编译指示(我猜是这种情况),sec用作一个单词。

  3. 什么是* libswigperlc :: MyClass_getDate?它是否返回一个重载连接运算符(。)和/或添加运算符(+)的对象?如果是(并且特别是没有严格/警告编译指示),您可能会期望任何类型的结果,具体取决于重载函数的定义。通过+获得正确的结果是其中一种可能性。

  4. 这就是我想到的一切,我希望其他人也加入他们的解释或纠正我的。

答案 1 :(得分:0)

tchrist - 你对问题类型行提出质疑是正确的。那条线是由Swig生成的,我对此并不了解。

我所要做的就是按原样返回typeglob ...

sub getDate { 
    *libswigperlc::MyClass_getDate2; 
}

现在调用者可以像这样访问成员......

my $tm = myClass->getDate();
print "Year = $tm->{year}";

至少现在我理解它已经足够了解它可以保留现状,或者根据最初的想法改变它。