小编Бер*_*ров的帖子

参数::验证或参数::检查,为什么我更喜欢这一个或另一个?

我很难在两个perl模块之间进行选择 - Params :: Validate和Params :: Check.我正在编写一个应该易于分发的Mojolicious应用程序.一般来说,我的意思是在共享主机上上传目录结构并准备好运行.Params :: Validate是非常强大和有效的,具有Pure-Perl实现.从版本5.10.0开始,Params :: Check在Perl Core发行版中你能指出其他"为什么我更喜欢这个或那个"?

perl mojolicious

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

如何在Perl中禁用自动修复?

假设你有一个巨大的应用程序"开发";)由一个大团队.以下是当某人检查数据结构太深时可能发生的潜在灾难的简化模型.如果无法完全或在范围内禁用自动验证,如何解决此问题?非常感谢你 :) !!!!

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方法来检查结构中更深层次的检查,我会轻易解决我的问题吗? …

perl autovivification

8
推荐指数
3
解决办法
4660
查看次数

如何使用Devel :: Cover with prove?

我看到这里和http://www.perlmonks.org上有一些类似的问题,但我仍然没有得到它.想象一下,我有一个带有'lib /'和't'目录的项目.我用'证明'来运行我的测试:

$ cd $PROJECT_ROOT
$ prove ./*.t
Run Code Online (Sandbox Code Playgroud)

我想在html中获取"lib /"目录中的一个或多个文件的报告.我不想要报告"t"目录中的文件.一个简单的例子就足够了.谢谢

perl

8
推荐指数
2
解决办法
1662
查看次数

如何在现有的Perl项目中应用/使用Perl :: Tidy?

这个问题并不是在寻找建议来找到不会受到伤害的正确方法.

假设如下:

  1. 我们在Perl中开发了一个很大的应用程序.
  2. 我们希望在命令行上使用perltidy来为格式化强加统一的样式/规则
  3. 我们有许多分支,我们不知道什么时候将合并到主分支.它们应该在合并之前或之后以某种方式整理
  4. 我们希望避免因格式化而导致的任何提交冲突.

我考虑过开始在子程序级别进行格式化,但我没有在perltidy中找到这样的功能.还有另一个功能" 跳过选定的代码段 ",但现在我可能想要相反 - 只格式化选定的代码段.这个想法是,当开发人员接触到部分代码时,他/她将只修改修改后的部分.

最好的方法是找到一种方法来格式化整个项目一次,而不会中断开发周期,并确保我们不会破坏代码的任何部分(在合并期间).我们有单元测试,但代码的某些部分可能仍未被发现.

我还要澄清一下,团队中的每个人都使用可能不同的编辑器.例如,我使用Sublime Text 3和SublimePerlTidy.其他人使用Kate或Atom或VIM.一个正确的方法似乎是只格式化我们触摸的代码片段@xxfelixxx(谢谢!)

git perl continuous-integration project-management perl-tidy

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

几个(fastcgi/uwsgi/scgi/proxy_pass)同一个nginx虚拟主机中的Mojolicious应用程序的示例?

我有一些基于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运行应用程序.我的配置应该是什么样的,我该如何运行应用程序.

提前致谢!

perl fastcgi apache2 nginx mojolicious

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

如何在Perl中使方法"最终"?

我想知道是否有可能确保我所制作的类中的方法不会被猴子修补(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)

perl final monkeypatching moose

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

如何使用Data :: Dumper显示可读的UTF-8字符串?

我在结构中有一些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?

debugging unicode perl utf-8 data-dumper

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

在Perl脚本中"不在某些shell下运行"是什么意思?

在许多perl脚本中(特别是在着名的CPAN发行版中),我找到了以下代码:

eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell
Run Code Online (Sandbox Code Playgroud)

我想知道它是为了什么?

谢谢.

perl cpan

5
推荐指数
1
解决办法
642
查看次数

可以使用"lib"中的"auto"

假设我有一个模块,最终有一天会在CPAN上获得.是否可以使用"auto"文件夹存储我的模块将使用的一些默认资源(模板,图像等).模块的用户可以在本地决定使用他自己的资源,但是模块应该开箱即用,而不需要任何配置.有些人倾向于使用.pm文件中的DATA部分(即使是二进制数据),但我更喜欢单独的文件.有会议或最佳做法吗?提前致谢.

perl

2
推荐指数
1
解决办法
141
查看次数

在Perl中,如何使用grep实现map?

前一段时间有人问我的"奇怪"的问题,我将如何实现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)

perl grep map

2
推荐指数
1
解决办法
835
查看次数

如何"很好地"检测Perl中类的直接父级?

请注意,在这种情况下,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';)来检测类的直接父级? 谢谢.

oop perl inheritance

2
推荐指数
1
解决办法
90
查看次数

如何在继承自我的基本模块的模块中启用FATAL警告,而不在所有模块中都提及FATAL?

我使用mojolicious框架来编写Web-App.Mojo :: Base有一个很好的功能,可以在从中继承的所有模块中启用限制和警告.

但是在我的应用程序的一组核心模块中,我希望所有警告都是致命的.这是通过写作来实现的

use warnings FATAL => qw( all );

我想编写一个像Mojo :: Base这样的模块,它只会对从中继承的每个调用者发出致命的警告.这样我就会避免一直写上面的代码.

谢谢.

perl

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