使用内联python时的完全限定名称

时间:2014-12-24 06:26:18

标签: perl

use Inline Python => <<'END';
   from MYPYTHONLIBRARY import *
END



my $Obj = MYPYTHONLIBRARY->new($a, $b);       # line 30

我得到的错误是: 无法通过包“newMYPYTHONLIBRARY找到对象方法“(perhaps you forgot to load "MYPYTHONLIBRARY "?) at /MY/LIBRARY/PATH/MYPERLLIBRARY.pm line 30”。

所以我在网上搜索,发现

“Inline :: Python检查Python代码和导入的主命名空间 那些名字进入当前包。因此,您必须完全指定 导入类的限定名称:

package TestPy;
use Inline Python => 'from StringIO import StringIO';
my $stringio = TestPy::StringIO->new;"  

•Markdown example link

我的问题是,在我的代码中有很多do和require语句,我无法获得完全限定的名称。

Fully::Qualified::name::MYPYTHONLIBRARY->new($a, $b);

那么如何获得我的python库的完全限定名称。

1 个答案:

答案 0 :(得分:1)

from MYPYTHONLIBRARY import *
...
...
my $Obj = MYPYTHONLIBRARY->new($a, $b);

您正在导入名为 INSIDE 的名称MYPYTHONLIBRARY.py。你在这个名为MYPYTHONLIBRARY的文件中有一个类吗?我对此表示怀疑。

以下是您应该做的事情的示例:

~/perl_programs$ ls 9.pl python_lib.py
9.pl        python_lib.py


~/perl_programs$ cat python_lib.py
def greet():
    print "hello"

class Dog(object):
    def __init__(self, name):
        self.name = name

    def get_name(self):
        return self.name

~/perl_programs$ cat 9.pl
use Inline Python; 

my $d = Dog->new("Sam");
print $d->get_name() . "\n";

greet();
__END__
__Python__
from python_lib import *

~/perl_programs$ perl 9.pl 
Sam
hello

顺便说一句,你不应该在python程序中使用from abc import *,而且在使用内联python时也不应该这样做。

  

那么如何获得我的python库的完全限定名称。

您不需要 python 库的完全限定名称 - 您需要将要导入python的perl包的名称。

  

我的问题是,在我的代码中有很多做和需要   声明,我无法获得完全限定的名称。

一个简单的例子怎么样?