考虑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如何在内部处理这个问题?
我有以下代码片段:
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) TLDR:查看问题标题.
在问题的原始版本中,有一个use strict ();
位于程序的顶部.没有声明变量my
.该计划奏效了.我指出,由于缺少my
s,代码不起作用,但事实证明我错了.
$ 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是否通过核心模块支持SSL/TLS?
我正在使用HTTP::Tiny
并希望在https
不安装任何库并依赖外部库和XS的情况下获取URL.
是否可以选择在HTTP::Tiny
不依赖OpenSSL的情况下使用SSL,或者是否有任何纯粹的Perl模块可以在不需要XS模块的情况下使用SSL获取数据?
我正在尝试使用GObject Introspection和Moo在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) 在安装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)
有谁知道为什么?
我已经将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语法有一些包装器功能,但我不确定是否允许我重新创建我通常做的.我也发现这个答案说你可以在理论上使用包装器,但实际上没有给出任何例子.
我正在寻找 Mojolicious one liner 来提供静态文件并默认列出目录
我来到这个班轮:
perl -Mojo -E "a->static->paths(['c:\temp']);a->start" daemon
Run Code Online (Sandbox Code Playgroud)
哪个在特定目录上提供静态文件,但默认情况下不列出文件,是否可以将其更改为默认情况下也将文件列为一个班轮?
我有一个软件可以XSL-FO
从文本文件创建描述并将其转换为PDF文档.文本文件中的每一行都转换为fo:block
FO,听起来不对,但我现在无法改变它.我的文档包含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
吗?
($test) = (@test);
$test = @test;
Run Code Online (Sandbox Code Playgroud)
在变量周围有一个括号,它会占据数组的第一个元素.我无法找到阵列周围支架的任何信息.
perl ×9
apache-fop ×1
catalyst ×1
debian ×1
https ×1
mojolicious ×1
moo ×1
perl-tidy ×1
ssl ×1
text-xslate ×1
xsl-fo ×1