小编sim*_*que的帖子

为什么Perl中的undef列表不是只读或常量值?

考虑Perl中的以下程序.

use strict;
use warnings;

my @foo = qw(a b c);
undef = shift @foo;

print scalar @foo;
Run Code Online (Sandbox Code Playgroud)

这将死于一个错误消息:

尝试修改只读值...

使用constat会产生不同的错误:

1 = shift @foo;
Run Code Online (Sandbox Code Playgroud)

无法修改标量赋值中的常量项...
执行...因编译错误而中止.

如果我们这样做:

(1) = shift @foo;
Run Code Online (Sandbox Code Playgroud)

所有这些都对我有意义.但是undef列入清单会有效.

(undef) = shift @foo;
Run Code Online (Sandbox Code Playgroud)

现在它打印2.

当然,如果您有一堆返回值并且只想要特定的值,这是常见的做法,例如:

my (undef, undef ,$mode, undef ,$uid, $gid, undef ,$size) = stat($filename);
Run Code Online (Sandbox Code Playgroud)

perldoc -f undef中的第9行代码示例显示了这一点,但没有解释.

我的问题是,Perl如何在内部处理这个问题?

perl

11
推荐指数
1
解决办法
135
查看次数

Perltidy autoformat hashref作为参数

我有以下代码片段:

my $obj = $class->new({ 
    schema    => $schema,
    reminder  => $reminder,
    action    => $action,
    dt        => $dt,     
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,perltidy尝试将其格式化为某种东西,如下所示:

my $obj = $class->new(
    {   schema   => $schema,
        reminder => $reminder,
        action   => $action,
        dt       => $dt,
    }
);
Run Code Online (Sandbox Code Playgroud)

我不喜欢花括号放置.我可以以某种方式配置perltidy来格式化它像第一个例子?(跳过块的格式不是一个选项.我想将每个更长的hashref格式化为该格式,因此它更紧凑和可读)

到目前为止我的perltidyrc:

-l=79  # Max line width is 78 cols
-i=4   # Indent level is 4 cols
-ci=4  # Continuation indent is 4 cols
-st    # Output to STDOUT
-se    # Errors to STDERR
-vt=2  # Maximal vertical tightness
-cti=0 # No …
Run Code Online (Sandbox Code Playgroud)

perl autoformatting perl-tidy

10
推荐指数
2
解决办法
376
查看次数

使用严格的空列表相当于不使用严格吗?

TLDR:查看问题标题.

在问题的原始版本中,有一个use strict ();位于程序的顶部.没有声明变量my.该计划奏效了.我指出,由于缺少mys,代码不起作用,但事实证明我错了.

$ perl e 'use strict (); $foo = 1'
Run Code Online (Sandbox Code Playgroud)

这个程序有效.它没有崩溃.但显然这崩溃了:

$ perl -e 'use strict; $foo = 1'
Global symbol "$foo" requires explicit package name (did you forget to declare "my $foo"?) at -e line 1.
Execution of -e aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是将其解析,看看是否还有其他事情发生.

$ perl -MO=Deparse -e 'use strict (); $foo = 1'
use strict ();
$foo = 1;
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.然后它让我思考,你可以做use strict …

perl

10
推荐指数
1
解决办法
100
查看次数

是否有支持SSL/TLS的核心Perl模块?

Perl是否通过核心模块支持SSL/TLS?

我正在使用HTTP::Tiny并希望在https不安装任何库并依赖外部库和XS的情况下获取URL.

是否可以选择在HTTP::Tiny不依赖OpenSSL的情况下使用SSL,或者是否有任何纯粹的Perl模块可以在不需要XS模块的情况下使用SSL获取数据?

perl ssl https

9
推荐指数
1
解决办法
1242
查看次数

为什么我的Moo对象继承自非Moo类,为某些模块添加到父包中?

我正在尝试使用GObject IntrospectionMoo在Perl中创建一个Gtk3应用程序.有一个来自Gtk的非Moo类Gtk::ApplicationWindow,我通过Moo使用它进行子类化extends 'Gtk::ApplicationWindow'.问题是,当创建该子类的对象时,它仍然是父类的类型 - 即Gtk::ApplicationWindow.

我通过继承自己的非基于Moo的类来尝试相同的事情,并且从这个子类创建的对象具有正确的类型.造成这种差异的原因是什么?

use v5.10;
use strict;
use warnings;

# Import the Gtk classes (non-Moo)
use Glib::Object::Introspection;
Glib::Object::Introspection->setup(basename => 'Gtk', version => '3.0', package => 'Gtk');
Glib::Object::Introspection->setup(basename => 'Gio', version => '2.0', package => 'Gio');

#################################################
{
    # A dummy non-Moo class
    package ClassNonMoo;
    sub new { bless {}, shift; }
}

{
    # Moo class extending the dummy class
    package ClassMoo;
    use Moo;

    extends 'ClassNonMoo';

    sub …
Run Code Online (Sandbox Code Playgroud)

perl moo gobject-introspection

8
推荐指数
1
解决办法
505
查看次数

Perl:为什么.在Debian 9中不再是@INC的一部分了吗?

在安装Debian 9时,我发现它.不再是其中的一部分了@INC.

为x86_64-linux-gnu-thread-multi构建的Perl(v5.24.1)

Built under linux
Compiled at Jan 15 2017 23:35:20
@INC:
 /etc/perl
 /usr/local/share/perl/5.24.1
 /usr/lib/x86_64-linux-gnu/perl5/5.24
 /usr/share/perl5
 /usr/lib/x86_64-linux-gnu/perl/5.24
 /usr/share/perl/5.24
 /usr/local/lib/site_perl
 /usr/lib/x86_64-linux-gnu/perl-base
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?

perl debian

8
推荐指数
1
解决办法
437
查看次数

从Text :: Xslate中的Template :: Toolkit获取WRAPPER功能

我已经将Template :: Toolkit用于我的最后几个Catalyst项目,并且有一个我喜欢使用的设置,可以清晰地分离我的模板.现在我希望使用Text :: Xslate,但是我无法弄清楚我是否可以进行相同的设置.以下是我通常用于Template :: Toolkit的内容.

__PACKAGE__->config({
    ...
    WRAPPER      => 'site/wrapper',
    ...
});
Run Code Online (Sandbox Code Playgroud)

包装纸

[% content WRAPPER site/html + site/layout %]
Run Code Online (Sandbox Code Playgroud)

HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>[% template.title or site.title %]</title>
  <style type="text/css">
  </style>
 </head>
 <body>
[% content %]
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

布局

<div id="header">[% PROCESS site/header %]</div>

<div id="content">
[% content %]
</div>

<div id="footer">[% PROCESS site/footer %]</div>`
Run Code Online (Sandbox Code Playgroud)

然后页眉和页脚都有自己的内容.我喜欢这个解决方案,因为所有内容都是干净利落的,我不会在内容中分解任何div标签,因为必须将开头标记放在标题中并关闭页脚.它看起来像TTerse语法有一些包装器功能,但我不确定是否允许我重新创建我通常做的.我也发现这个答案说你可以在理论上使用包装器,但实际上没有给出任何例子.

perl catalyst template-toolkit text-xslate

7
推荐指数
1
解决办法
86
查看次数

Mojolicious 一种带有列表目录的服务状态文件的衬垫

我正在寻找 Mojolicious one liner 来提供静态文件并默认列出目录

我来到这个班轮:

perl -Mojo -E "a->static->paths(['c:\temp']);a->start" daemon
Run Code Online (Sandbox Code Playgroud)

哪个在特定目录上提供静态文件,但默认情况下不列出文件,是否可以将其更改为默认情况下也将文件列为一个班轮?

perl mojolicious mojolicious-lite

7
推荐指数
1
解决办法
73
查看次数

如何使用XSL-FO和FOP 1.0创建两列布局?

我有一个软件可以XSL-FO从文本文件创建描述并将其转换为PDF文档.文本文件中的每一行都转换为fo:blockFO,听起来不对,但我现在无法改变它.我的文档包含1到3页的A4.

我现在需要做的是在现有文本下面添加一个宽约8厘米的图形.它应该是左对齐的.在它旁边,我想放置一个带有(长)描述的文本块.

布局示例

我看了几个关于FO的文档并提出了这个:

<fo:block intrusion-displace="block" margin-top="20mm">
 <fo:float float="right">
   <fo:block margin-left="20mm">
    Bacon ipsum dolor sit amet laborum proident...
   </fo:block>
 </fo:float> 
  <fo:external-graphic src="image.png"/> 
</fo:block>
Run Code Online (Sandbox Code Playgroud)

这似乎是我想要的(当然经过一些微调),但遗憾的是FOP 还不支持 fo:float.

似乎还有一种方法可以创建多个列(没有表格),但我无法弄清楚它是如何工作的.一个似乎需要一个新的页面,但如果有可用的空间我需要使用当前页面(我猜我不必关心).

所以我的问题:还有另一种方法可以不使用它来构建它fo:float吗?

xsl-fo apache-fop

6
推荐指数
1
解决办法
3527
查看次数

是什么区别($ test)=(@ test); 和$ test = @test; 在Perl?

($test) = (@test);
$test = @test;
Run Code Online (Sandbox Code Playgroud)

在变量周围有一个括号,它会占据数组的第一个元素.我无法找到阵列周围支架的任何信息.

perl

6
推荐指数
1
解决办法
177
查看次数