小编sno*_*yjc的帖子

这个带有一元加号的 Perl 片段有什么作用?join( '/', 拼接 @t, 0, +@d )

这个带有一元加号的 Perl 片段有什么作用?

join( '/', splice @t, 0, +@d )
Run Code Online (Sandbox Code Playgroud)

这是来自 File::Path.pm 第 267 行,我正在尝试理解它。根据文档,一元加什么也不做。另外 splice 的第三个参数是一个整数,而不是一个数组。这实际上做了吗scalar(@d)?感谢您的帮助。我正在尝试使用Pythonizer将此代码翻译为 python。

我尝试使用 -MO=Deparse ,它所做的就是吃掉+并移动括号:

join '/', splice(@t, 0, @d);
Run Code Online (Sandbox Code Playgroud)

python arrays perl unary-operator

6
推荐指数
2
解决办法
150
查看次数

python中用于实现perl的tie标量操作的描述符

我需要一些有关 python 描述符的帮助。我编写了一个从 perl 到 python (Pythonizer) 的自动翻译器,并且我正在尝试实现绑定标量,它基本上是一个充当标量的对象,但具有适当调用的 FETCH 和 STORE 操作。我使用动态类命名空间“main”来存储变量值。我试图为该对象定义__get____set__操作,但它们不起作用。任何帮助将不胜感激!

\n
main = type('main', tuple(), dict())\n\nclass TiedScalar(dict):    # Generated code - can't be changed\n    FETCH_CALLED_v = 0\n    STORE_CALLED_v = 0\n\n    def STORE(*_args):\n        _args = list(_args)\n        self = _args.pop(0) if _args else None\n        TiedScalar.STORE_CALLED_v = TiedScalar.STORE_CALLED_v + 1\n        self["value"] = _args.pop(0) if _args else None\n        return self.get("value")\n    \n    \n    #TiedScalar.STORE = lambda *_args, **_kwargs: perllib.tie_call(STORE, _args, _kwargs)\n    \n    \n    def FETCH(*_args):\n        _args = list(_args)\n        self …
Run Code Online (Sandbox Code Playgroud)

python python-descriptors

5
推荐指数
1
解决办法
158
查看次数

在 perl 中 \*STDIN 与 STDIN 相同吗?

我是Pythonizer的作者,我正在尝试将 CGI.pm 的代码从标准 perl 库转换为 Python。我在read_from_client中遇到了这段代码:

read(\*STDIN, $$buff, $len, $offset)
Run Code Online (Sandbox Code Playgroud)

和 just是\*STDIN一样的吗STDIN?我不明白他们为什么这样使用它。感谢您的帮助!

该模块还引用了\*main::STDIN- 这也一样吗STDIN(我会在 python 中将 其简单地翻译STDIN为)?代码sys.stdin

foreach my $fh (
    \*main::STDOUT,
    \*main::STDIN,
    \*main::STDERR,
) { ... }
Run Code Online (Sandbox Code Playgroud)

perl stdin reference typeglob

2
推荐指数
1
解决办法
200
查看次数

在 perl 中,$self->subname 与 $self->MYPACKAGE::subname 相同吗?

在 Perl 中,与$self->subname相同吗$self->MYPACKAGE::subname我是Pythonizer的作者,还有另一段神秘的 Perl 代码,这个代码又来自 CGI.pm。这里的代码采用$self,它是 CGI 包的实例变量,然后调用hidden其中定义的函数,但代码不只是使用$self->hidden(...),它还使用$self->CGI::hidden(...). 当我将其转换为 Python 时self.CGI.hidden(...),我收到一条错误消息,指出 CGI 类没有 CGI 属性。我想知道在这种情况下是否应该创建一个仅指向类实例的 CGI 属性(或者应该指向该类)?无论如何,这到底意味着什么?

package CGI;
...
sub hidden { ... }
...
$self->CGI::hidden(...);
Run Code Online (Sandbox Code Playgroud)

perl

2
推荐指数
1
解决办法
55
查看次数