懒惰地构建属性的最佳方法是什么?
class I {
has $!cheezeburger;
method cheezeburger {
given $!cheezeburger {
when .so {return $_}
default {
# build $cheezeburger, set attribute to it, return
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是很多cheezeburger.什么可能是一个不那么冗长的方式?
我正在努力获得notepad ++(v 6.7.5)上的"Fucntion List"功能,这个功能适用于带有类的Perl(或perl用语中的包).默认情况下,仅支持包外的常规子例程.
下面是功能列表配置文件中的XML代码段(位于我的Windows机器上的C:\ Users\user\AppData\Roaming\Notepad ++\functionList.xml).我自己在默认的"function"节点上添加了"classRange"节点.
编辑:由于用户stribizhev,下面是更正的XML
更新:我已经注释掉了"普通"功能部分,因为它导致我的所有方法在功能列表中出现两次.
<parser id="perl_function" displayName="Perl">
<classRange mainExpr="^package.*?(?=\npackage|\Z)">
<className>
<nameExpr expr="\s\K[^;]+"/>
</className>
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{" displayMode="$className->$functionName">
<functionName>
<funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
</classRange>
<!--
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{" displayMode="$className->$functionName">
<functionName>
<nameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
-->
</parser>
Run Code Online (Sandbox Code Playgroud)
这方面的文档就在这里.
编辑:下面的问题是在AWS ec2微实例上的库存Perl 5.16.3上生成的.它最终通过安装和切换到Perl 5.24.3来解决perlbrew
.
LWP::UserAgent
保存内容时,似乎会导致某种内存泄漏.
use v5.10;
use strict;
use warnings;
use IO::Socket::SSL;
use LWP::UserAgent;
use Memory::Usage;
use Time::HiRes 'usleep';
my $ua = LWP::UserAgent->new;
my $mu = Memory::Usage->new;
$ua->ssl_opts(SSL_ocsp_mode => SSL_OCSP_NO_STAPLE); ## disable OCSP stapling
for (1..50) {
$mu->record("before request: $_");
$ua->get('http://www.wikipedia.org/wiki/Special:Random', ':content_file' => 'temp.html');
usleep 50000;
}
$mu->dump();
Run Code Online (Sandbox Code Playgroud)
输出:
time vsz ( diff) rss ( diff) shared ( diff) code ( diff) data ( diff)
0 213964 ( 213964) 25112 ( 25112) 7532 ( 7532) 8 …
Run Code Online (Sandbox Code Playgroud) 例如,匹配不包含"foo"但包含"bar"的字符串的正则表达式.我没有使用两个表达式的奢侈.我需要在一个表达式中完成它.
例:
"这是foo baz酒吧" - 不应该匹配
"这是foo baz" - 不应该匹配
"这是baz酒吧" - 应该匹配
我在Perl,fwiw