我目前正在开发一个多环境perl脚本.众所周知,如果做得不好,环境配置杂耍可能会非常痛苦.由于我的perl脚本必须在配置值重载目的中允许一些命令行参数,我带来了以下解决方案:
package Cfg;
use strict;
use warnings;
my $gEnvironment = "DEBUG";#"PRODUCTION";
my %gConfig = (
DEBUG=>{MESSAGE=>"This is a dbg env.",URL=>"www.my-dbg-url.org"},
PRODUCTION=>{MESSAGE=>"This is a prod env.",URL=>"www.shinyprodurl.org"}
);
my $gMessage = defined $gConfig{$gEnvironment} ?
$gConfig{$gEnvironment}{MESSAGE} : die "Crappy environment";
sub Message { $gMessage = shift(@_) if (@_); $gMessage }
sub Url {
defined $gConfig{$gEnvironment} ?
$gConfig{$gEnvironment}{URL} : die "Crappy environment"
}
1;
Run Code Online (Sandbox Code Playgroud)
那么,以下脚本:
use strict;
use warnings;
use Cfg;
print Cfg::Message,"\n";
Cfg::Message("I'm a surcharged message.");
print Cfg::Message;
Run Code Online (Sandbox Code Playgroud)
会产生下一个输出:
This is a dbg …Run Code Online (Sandbox Code Playgroud) 我通常的'x'用法是:
print("#" x 78, "\n");
Run Code Online (Sandbox Code Playgroud)
其中连接字符串"#"的78倍.但最近我遇到了这段代码:
while (<>) { print if m{^a}x }
Run Code Online (Sandbox Code Playgroud)
以'a'开头打印每一行输入.我理解正则表达式匹配部分(m {^ a}),但我真的不知道'x'在这里做了什么.
任何解释将不胜感激.
我想知道你是否有任何提高Perl脚本性能性能的基本技巧(比如memoizing determinist functions)?
最初,我一直在寻找一种快速访问哈希引用元素的方法(如果没有可用的值,则使用默认值).
所以我尝试了以下方法:
use strict;
use warnings;
use DateTime;
my $hashref = { };
for (0..249) {
my $lIdx = $_ * 2;
$hashref->{"MYKEY$lIdx"} = "MYVAL$lIdx";
}
sub WithVariable{
my $result = $hashref->{"MYKEY$_[0]"};
return defined $result ? $result : "NONE";
}
sub WithoutVariable{
return defined $hashref->{"MYKEY$_[0]"} ? $hashref->{"MYKEY$_[0]"} : "NONE";
}
$|++;
my @preciousvalues1 = ();
my @preciousvalues2 = ();
my $dt = DateTime->now;
for (1..25000) { for (0..498) { push @preciousvalues1, WithVariable($_) } }
my $lag = DateTime->now - $dt; …Run Code Online (Sandbox Code Playgroud)