这个带有一元加号的 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 描述符的帮助。我编写了一个从 perl 到 python (Pythonizer) 的自动翻译器,并且我正在尝试实现绑定标量,它基本上是一个充当标量的对象,但具有适当调用的 FETCH 和 STORE 操作。我使用动态类命名空间“main”来存储变量值。我试图为该对象定义__get__和__set__操作,但它们不起作用。任何帮助将不胜感激!
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) 我是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 中,与$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)