小编kob*_*ame的帖子

如何说服Devel :: Trace打印BEGIN块语句?

有一个简单的脚本p.pl:

use strict;
use warnings;
our $x;
BEGIN {
    $x = 42;
}
print "$x\n";
Run Code Online (Sandbox Code Playgroud)

当我运行它时:

perl -d:Trace p.pl
Run Code Online (Sandbox Code Playgroud)

打印:

>> p.pl:3: our $x;
>> p.pl:7: print "$x\n";
42
Run Code Online (Sandbox Code Playgroud)

如何打印BEGIN块语句,例如$x = 42;

因为我的意图不明确,加上澄清:

寻找在perl脚本运行时打印语句的任何方法(如Devel :: Trace它),但包括 BEGIN块中的语句.

perl

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

模块以"1;"结尾,perlcritic抱怨它没有

有一个简单的模块

package Rrr;
use 5.014;
use warnings;
use namespace::sweep;
use Moo;
use Method::Signatures::Simple;

BEGIN {
    our $VERSION = '0.0.1';
}

has 'root' => (
    is => 'rw',
    default => 'root'
);

method func {
    say 'This is the func method from ' . __PACKAGE__ . ' with value: ', $self->root;
}

1;
Run Code Online (Sandbox Code Playgroud)

perlcritic -1

Code is not tidy at line 1, column 1.  See page 33 of PBP.  (Severity: 1)
Module does not end with "1;" at line …
Run Code Online (Sandbox Code Playgroud)

perl perl-critic

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

多站点感知PSGI应用程序开发

普拉克::生成器允许挂接多个主机,例如一些如下面的代码片段:

my @sites = load_site_names();
my $apps;
for my $site (@sites) {
    $apps->{$site} = Some::PsgiFramework::MyApp->new( config => get_config($site) );
}

use Plack::Builder;
builder {
    for my $site (@sites) {
        mount "$site" => $apps->{$site};
    }
    mount '/' => sub { ... };
}
Run Code Online (Sandbox Code Playgroud)

例如

  • load_site_names返回站点的列表一样http://example.com,http://some.other.site.com...
  • 每个"虚拟主机"都会使用相同的 Some::PsgiFramework::MyApp
  • 只是他们的配置不同

我完全需要以上内容 - 需要开发一个简单的网络应用程序,该应用程序应该部署在不同(低流量)站点的数据库中,并且不希望为每个站点设置不同的PSGI服务器.

然而,Plack本身的作者说(在Plack :: Request中)

请注意,此模块旨在供Plack中间件开发人员和Web应用程序框架开发人员而非应用程序开发人员(最终用户)使用.

使用Plack :: Request直接编写Web应用程序当然是可行的,但不推荐:它就像使用mod_perl的Apache :: Request那样:但是程度太低.

如果您正在编写Web应用程序而不是框架,那么建议您使用一个支持PSGI的Web应用程序框架(http://plackperl.org/#frameworks),或者查看HTTP :: Engine等模块在PSGI之上提供更高级别的请求和响应API.

这就是问题所在.

我在MetaCPAN中检查了许多不同的基于PSGI的框架.并且AFAIK每个都是基于单一的,例如,不允许写入应用程序可以多次共享(安装)同一个不同的站点app.psgi. …

perl plack psgi

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

Perl CORE ::说vs -E

这个答案中使用perl one-liner作为:

perl -we '... CORE::say "x=$x"'
Run Code Online (Sandbox Code Playgroud)

使用-eCORE::say而不是更短的优点是什么:-E和普通的say,例如:

perl -wE '... say "x=$x"'
Run Code Online (Sandbox Code Playgroud)

perl

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

使用Plack/PSGI/Poet应用程序进行身份验证和/或HTTPS

我需要构建一个简单的Web应用程序.我决定用Poet(Mason2)来做,它使用Plack.

应该允许应用程序仅由经过身份验证的用户使用,因此我需要构建一些登录/密码功能.

已经有一个Plack模块Plack :: Middleware :: Auth :: Basic允许使用Basic用户auth,可以设置检查.htpasswd或类似.但基本身份验证不是很安全; 任何人都可以通过数据包捕获等方式获取登录密码.

以下是两种可能的解决方案

  • 通过HTTPS运行我的app.psgi(443) - 链接级加密
  • 或者是否有一些更好的auth方法允许在没有https的情况下进行安全身份验证?

问题:

  • 关于HTTPS - 我不知道如何运行我的app.psgiHTTPS.我需要稍微修改一下我的应用程序吗?什么链接显示我如何运行plackuphttps?
  • 或者第二种:是否有一些方法(中间件/或perl模块)允许我在标准的未加密端口上构建 安全认证?(80)

那么,使用Plack应用程序实现安全身份验证的相对简单方法是什么?

PS:我不关心其余的沟通.我只需要不允许获取密码的安全身份验证.

PPS:https很容易使用apache(和自签名)证书.但我不知道如何使用它plackup(以及任何其他基于Plack的服务器)

perl plack psgi poet

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

Perl中的虚拟文件系统

我正在寻找Perl中的虚拟文件系统层.无论如何实现实际文件系统,都可以为基本文件系统例程提供一般抽象,例如ls,mkdir等等.

我想要一个这样的界面:

# create a directory "/some/path/tmp" in my current filesystem
my $plainfs = Module::new->(type => 'local', root=>'/some/path);
$plainfs->mdkir("/tmp"); 

# create "tmp" dir on a remote filesystem
my $sshfs = Module::new->(type=>'ssh', root=>'user:password@example.com:~/pub')
$sshfs->mdkir("/tmp"); 
Run Code Online (Sandbox Code Playgroud)

我在MetaCPAN上找到了VFS包,遗憾的是只有空的,未实现的模块.

已经实施了什么?现在,我只寻找"本地"文件系统和ftp或ssh-我不需要数据库"文件系统"或任何其他奇特的"文件系统",如CVS左右.搜索20k MetaCPAN模块是痛苦的,没有任何标记系统或类似...

perl

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

Perl:Javascript :: V8模板 - 来自perl

寻找像HTML :: Mason(或Mason)这样的模板引擎,所以将源组件"编译"成perl代码,而不是perl-code将"编译"组件到JavaScript代码中并在用Javascript :: V8运行/执行它们之后perl模块.

动机:寻找安全模板语言的解决方案,可以在不影响服务器安全性的情况下编辑用户.JavaScript是全功能语言,因此使用它可能比TT或类似的某些"迷你语言"更好/更快.对我来说最好的是扩展(重写)Mason编译成Joose/JavaScript而不是Moose/Perl.;)

是的,想要使用Javascript :: V8从perl执行此操作,因为这种方式可以通过Javascript :: V8 $ context-> bind_function以非常安全的方式提供所有perl的功能.

问题:

  • 有人知道吗?(在CPAN中什么也没找到)......

编辑:在梅森你可以写例如

% #perl version
% my(@list) = qw(Jane John Doe);
<ul> 
% foreach my $item (@list) { 
  <li><% uc($item) %></li> 
% } 
</ul>
Run Code Online (Sandbox Code Playgroud)

很高兴有可能在JS中编写上述内容,例如:

% //javascript version
% var list = ["Jane", "John", "Doe"];
<ul> 
% for(var i in list) {
  <li><% perl_uc($list[i]) %></li>
  <!-- the "perl_uc" is the real perl uc() what is binded
       with Javascript::V8::bind_function(perl_uc => sub { …
Run Code Online (Sandbox Code Playgroud)

perl v8 mason joose embedded-v8

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

使用perl对存储在JSON中的utf8文件名进行规范化

我有两个来自不同操作系统的Json文件.

两个文件都编码UTF-8并包含UTF-8编码filenames.

一个文件来自OS X,文件名是NFD形式:( od -bc)

0000160   166 145 164 154 141 314 201 057 110 157 165 163 145 040 155 145
           v   e   t   l   a    ?  **   /   H   o   u   s   e       m   e
Run Code Online (Sandbox Code Playgroud)

第二个包含相同的文件名但以NFC形式:

000760   166 145 164 154 303 241 057 110 157 165 163 145 040 155 145 163
           v   e   t   l   á  **   /   H   o   u   s   e       m   e   s
Run Code Online (Sandbox Code Playgroud)

据我所知,这被称为"不同的规范化",并且有一个Unicode::Normalize …

perl json utf-8

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

如何修复Mojolicious-Boilerplate应用程序?

今天我开始学习Mojolicious框架.恕我直言,最好的方法是"通过实例学习",所以研究一些"已经完成"的应用程序.因此我下载了Mojolicious-Boilerplate,应该是Mojolicious和Twitter bootstrap的演示.不幸的是它甚至没有开始.

#!/usr/bin/env perl
use Mojo::Base -strict;

use File::Basename 'dirname';
use File::Spec;

push @INC, join('/', File::Spec->splitdir(dirname(__FILE__)), '..', 'lib');

# Check if Mojolicious is installed;
die <<EOF unless eval 'use Mojolicious::Commands; 1';
It looks like you don't have the Mojolicious framework installed.
Please visit http://mojolicio.us for detailed installation instructions.

EOF

# Application
$ENV{MOJO_APP} ||= 'Boilerplate';

# Start commands
Mojolicious::Commands->start;
Run Code Online (Sandbox Code Playgroud)

编辑开始和错误:

$ morbo script/boilerplate 
Couldn't load application from file "script/boilerplate": Can't locate object method "start" via package "Mojolicious::Commands" at …
Run Code Online (Sandbox Code Playgroud)

perl mojolicious

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

谁对http:// 0:port错了?

Plack套件通常使用http://0:port.例如以下内容

plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");'
Run Code Online (Sandbox Code Playgroud)

版画

HTTP::Server::PSGI: Accepting connections at http://0:5000/
Run Code Online (Sandbox Code Playgroud)

但是,LWP::UserAgent(或一些更深层次的模块)不接受它,例如:

perl -MLWP::UserAgent -E '$u=LWP::UserAgent->new;$res=$u->get("http://0:5000/valid/path");print $res->status_line'
Run Code Online (Sandbox Code Playgroud)

打印:

500 No Host option provided
Run Code Online (Sandbox Code Playgroud)

但是

perl -MLWP::UserAgent -E '$u=LWP::UserAgent->new;$res=$u->get("http://localhost:5000/valid/path");print $res->status_line'
Run Code Online (Sandbox Code Playgroud)

版画

200 OK
Run Code Online (Sandbox Code Playgroud)

问题是:谁错了?

  • http://0:port有效的,例如LWP是"错误的"
  • 或者它无效,PSGI仅将其用作"随机有效"的快捷方式?

perl lwp psgi

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

标签 统计

perl ×10

psgi ×3

plack ×2

embedded-v8 ×1

joose ×1

json ×1

lwp ×1

mason ×1

mojolicious ×1

perl-critic ×1

poet ×1

utf-8 ×1

v8 ×1