我很难在两个perl模块之间进行选择 - Params :: Validate和Params :: Check.我正在编写一个应该易于分发的Mojolicious应用程序.一般来说,我的意思是在共享主机上上传目录结构并准备好运行.Params :: Validate是非常强大和有效的,具有Pure-Perl实现.从版本5.10.0开始,Params :: Check在Perl Core发行版中你能指出其他"为什么我更喜欢这个或那个"?
假设你有一个巨大的应用程序"开发";)由一个大团队.以下是当某人检查数据结构太深时可能发生的潜在灾难的简化模型.如果无法完全或在范围内禁用自动验证,如何解决此问题?非常感谢你 :) !!!!
use strict; use warnings;use Data::Dumper;
my $some_ref = {akey=>{deeper=>1}};
print Dumper($some_ref );
if($some_ref->{deep}{doot} == 1){
print 'too deep '.$/;
}
if($some_ref->{deep}){
print 'Already in a deep doot'.$/;
}
print Dumper($some_ref );
Run Code Online (Sandbox Code Playgroud)
这输出如下:
$VAR1 = {
'akey' => {
'deeper' => 1
}
};
Use of uninitialized value in numeric eq (==) at autovivify_test.pl line 5.
Already in a deep doot
$VAR1 = {
'deep' => {},
'akey' => {
'deeper' => 1
}
};
Run Code Online (Sandbox Code Playgroud)
是的,我知道有警告,但......可能为时已晚.
嘿伙计们,我的hashref引用一个绑定的HASH可能会有所帮助.
可能如果我实现了一个好的FETCH方法来检查结构中更深层次的检查,我会轻易解决我的问题吗? …
我看到这里和http://www.perlmonks.org上有一些类似的问题,但我仍然没有得到它.想象一下,我有一个带有'lib /'和't'目录的项目.我用'证明'来运行我的测试:
$ cd $PROJECT_ROOT
$ prove ./*.t
Run Code Online (Sandbox Code Playgroud)
我想在html中获取"lib /"目录中的一个或多个文件的报告.我不想要报告"t"目录中的文件.一个简单的例子就足够了.谢谢
这个问题并不是在寻找建议来找到不会受到伤害的正确方法.
假设如下:
我考虑过开始在子程序级别进行格式化,但我没有在perltidy中找到这样的功能.还有另一个功能" 跳过选定的代码段 ",但现在我可能想要相反 - 只格式化选定的代码段.这个想法是,当开发人员接触到部分代码时,他/她将只修改修改后的部分.
最好的方法是找到一种方法来格式化整个项目一次,而不会中断开发周期,并确保我们不会破坏代码的任何部分(在合并期间).我们有单元测试,但代码的某些部分可能仍未被发现.
我还要澄清一下,团队中的每个人都使用可能不同的编辑器.例如,我使用Sublime Text 3和SublimePerlTidy.其他人使用Kate或Atom或VIM.一个正确的方法似乎是只格式化我们触摸的代码片段@xxfelixxx(谢谢!)
git perl continuous-integration project-management perl-tidy
我有一些基于Mojolicious的应用程序,可以使用mod_cgi和mod_fastcgi在Apache2下运行.
网址例如:
http://example.org/oneapp/path/info?foo=bar
http://example.org/oneapp?foo=bar
http://example.org/secondapp/path/info?foo=bar
http://example.org/thirdapp/path/info?baz=heh
#etc...
Run Code Online (Sandbox Code Playgroud)
我使用proxy_pass 将应用程序配置为子域名相对成功,但我想保留旧的URL(只需从apache2切换到nginx).我想保留相同的网址,但使用nginx运行应用程序.我的配置应该是什么样的,我该如何运行应用程序.
提前致谢!
我想知道是否有可能确保我所制作的类中的方法不会被猴子修补(Monkey patch).麋能实现吗?
考虑以下:
{
package Foo;
sub hello{print "HI"}
1;
}
package main;
sub Foo::hello {print "bye"}
Foo::hello()#bye
Run Code Online (Sandbox Code Playgroud) 我在结构中有一些UTF-8编码的字符串,我倾向于使用Data :: Dumper进行调试.
一个小测试案例是:
use utf8;
use Data::Dumper;
say Dumper({??=>"??"}
Run Code Online (Sandbox Code Playgroud)
它输出
{
"\x{434}\x{430}" => "\x{43d}\x{435}"
};
Run Code Online (Sandbox Code Playgroud)
但我想看
{
"??" => "??"
};
Run Code Online (Sandbox Code Playgroud)
当然,我的结构非常复杂.如何在调试时使转储结构中的字符串可读?也许我必须以chr某种方式处理输出warn/say?
在许多perl脚本中(特别是在着名的CPAN发行版中),我找到了以下代码:
eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell
Run Code Online (Sandbox Code Playgroud)
我想知道它是为了什么?
谢谢.
假设我有一个模块,最终有一天会在CPAN上获得.是否可以使用"auto"文件夹存储我的模块将使用的一些默认资源(模板,图像等).模块的用户可以在本地决定使用他自己的资源,但是模块应该开箱即用,而不需要任何配置.有些人倾向于使用.pm文件中的DATA部分(即使是二进制数据),但我更喜欢单独的文件.有会议或最佳做法吗?提前致谢.
前一段时间有人问我的"奇怪"的问题,我将如何实现map用grep.今天我试着去做,这就是出来的.我是否从Perl中挤出了所有东西,还是有其他更聪明的黑客?
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
sub my_map(&@) {
grep { $_= $_[0]->($_) } @_[1..$#_];
}
my @arr = (1,2,3,4);
#list context
say (my_map sub {$_+1}, @arr);
#scalar context
say "".my_map {$_+1} @arr;
say "the array from outside: @arr";
say "builtin map:", (map {$_+1} @arr);
Run Code Online (Sandbox Code Playgroud) 请注意,在这种情况下,UNIVERSAL :: isa对我不起作用.我不想像继续那样走向继承树__PACKAGE__->isa('UNIVERSAL').
这是一个例子:
use 5.10.1;
use strict;
use warnings;
use utf8;
{
package Parent;
#How to do this more elegantly?
sub inherits_from_parent {
no strict 'refs';
return (__PACKAGE__ eq @{"$_[0]\::ISA"}[0]);
}
}
{
package Child;
use parent -norequire, qw(Parent);
}
package main;
say "Child directly inherits from Parent"
if Child->inherits_from_parent;
#not wat I want
say 'Child is universal:'.Child->isa('UNIVERSAL');
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法(不使用no strict 'refs';)来检测类的直接父级?
谢谢.
我使用mojolicious框架来编写Web-App.Mojo :: Base有一个很好的功能,可以在从中继承的所有模块中启用限制和警告.
但是在我的应用程序的一组核心模块中,我希望所有警告都是致命的.这是通过写作来实现的
use warnings FATAL => qw( all );
我想编写一个像Mojo :: Base这样的模块,它只会对从中继承的每个调用者发出致命的警告.这样我就会避免一直写上面的代码.
谢谢.