我想知道为什么
use warnings;
use strict;
Run Code Online (Sandbox Code Playgroud)
在Perl中不是默认值.每个脚本都需要它们.如果某人(有充分理由)需要禁用它们,则应使用no strict
和/或使用某些命令行参数(对于单行).
是否有太多写得不好的CPAN模块(使用"糟糕"表示没有use strict
)?或者是因为这会破坏生产中的许多代码?我确信有理由,我想知道.
5.14 IO::File
是按需自动加载的,不可能用这些基本的pragma做类似的事情吗?
任何人都可以通过一些例子展示..
和...
运营商之间的确切区别吗?
从perlop手册页:
如果您不希望它在下一次评估之前测试正确的操作数,就像在sed中一样,只需使用三个点("...")而不是两个.
但到底是什么意思呢?我不明白perlop的例子:
@lines = (" - Foo",
"01 - Bar",
"1 - Baz",
" - Quux"
);
foreach (@lines) {
if (/0/ .. /1/) {
print "$_\n";
}
}
Run Code Online (Sandbox Code Playgroud)
与...
将打印Baz
-但为什么呢?更确切地说,为什么Baz
不打印两个点而只有...
?
重新提出问题,因为
评论:这个问题已经获得了"流行的问题徽章",所以可能我不是唯一没有希望的人.:)
不幸的是,展示完整的问题堆栈导致了一个非常长的问题,这是非常梅森特定的.
首先,只有意见的部分:)
我使用HTML :: Mason多年,现在尝试使用Mason2.在诗人和梅森 都在CPAN最先进的框架.没有找到任何比较,开箱即用的东西允许写得如此干净/但非常黑客:)/ web-apps,包括许多电池(记录,缓存,配置管理,基于原生PGSI等......)
不幸的是,作者并不关心其余部分,例如默认情况下,它只是基于ascii, 没有任何手册,常见问题或建议:如何使用unicode
现在的事实.演示.创建一个诗人应用程序:
poet new my #the "my" directory is the $poet_root
mkdir -p my/comps/xls
cd my/comps/xls
Run Code Online (Sandbox Code Playgroud)
并添加到dhandler.mc
下面(将说明两个基本问题)
<%class>
has 'dwl';
use Excel::Writer::XLSX;
</%class>
<%init>
my $file = $m->path_info;
$file =~ s/[^\w\.]//g;
my $cell = lc join ' ', "ÅNGSTRÖM", "in the", $file;
if( $.dwl ) …
Run Code Online (Sandbox Code Playgroud) 下一个脚本
str=/aaa/bbb/ccc.txt
echo "str: $str"
echo ${str##*/} == $(basename $str)
echo ${str%/*} == $(dirname $str)
Run Code Online (Sandbox Code Playgroud)
生产:
str: /aaa/bbb/ccc.txt
ccc.txt == ccc.txt
/aaa/bbb == /aaa/bbb
Run Code Online (Sandbox Code Playgroud)
问题是:
dirname
和basename
变量替换时为什么?主要是因为:
str="/aaa/bbb/ccc.txt"
count=10000
s_cmdbase() {
let i=0
while(( i++ < $count ))
do
a=$(basename $str)
done
}
s_varbase() {
let i=0
while(( i++ < $count ))
do
a=${str##*/}
done
}
s_cmddir() {
let i=0
while(( i++ < $count ))
do
a=$(dirname $str)
done
}
s_vardir() {
let i=0
while(( i++ …
Run Code Online (Sandbox Code Playgroud) 我正在学习现代perl - Moose,Plack等.在很多建议中你可以阅读"通过实例学习" - 所以开始搜索一些用Modern perl编写的可立即运行的应用程序.
浏览了很多页面:
还有更多(perl.org等) - 不幸的是 - 我找不到任何用现代perl编写的"准备运行"应用程序.
我没有找到任何Moose/Plack - CMS,既没有ShoppingCart,也没有Blog或任何Web应用程序.很难相信它们不存在,所以我可能在错误的地方寻找.
请问您能指出一些用Modern Perl(不仅仅是框架)编写的"Ready to run"Web应用程序吗?我检查了上面链接中的所有应用程序,没有人是Moose/Plack.
基于催化剂:
其他Moose/Plack应用:
已经有关于Perl + AJAX的问题,比如这里,这里或这里以及其他几个.他们已经超过2岁了,我希望能有一些新东西.
对于通常的工作流程:
if clicked this button (or changed this field.. etc),
POST these data to the server,
read the JSON answer,
and update this/these DIV(s) in a DOM... etc.
Run Code Online (Sandbox Code Playgroud)
这个问题可以归类为模糊,但我真的迷失了,需要帮助:今天在Perl世界中制作AJAX应用程序的最常用方法是什么.
我找到了这些:
这些模块多年来一直没有更新.它们是否稳定并且在使用中?或者他们被弃用了,还有更好的方法吗?(对于现代Perl技术 - 如Plack).
当我读到答案时,我认为主要问题可能在于我的英语.我不知道如何正确表达自己.
我知道Perl.也许我不是专家,但我写了几千行代码.我认识Dancer,并且已经在Mojo ...... :: Lite中编写了一些应用程序.知道JSON {:: XS},我知道AJAX是如何工作的.
现在(由于某种原因)我更喜欢使用Mason2,使用Mason :: Plugin :: RouterSimple和其他几个CPAN模块和Moose.Catalyst,Jifty对我的需求来说太大了.
回到问题:
我最喜欢的JS框架是jQuery,我在几个项目中使用它,用于模态窗口,手风琴,标签等.
但
我的主要问题正是在Sismetic的回答中.我不想写JavaScript.不喜欢它.(不太了解它,并讨厌我必须写的东西,var arr = new Array(); …
我想在我的所有程序中使用一些包和一些编译指示,例如:
use 5.014;
use warnings;
use autodie;
use My::ModuleA::Something;
use ModuleB qw(Func1 Func2);
Run Code Online (Sandbox Code Playgroud)
我不想在每个模块中重复自己,所以寻找一种方法如何制作一个包,例如My::Common
包含上述包的内容以及我的程序中只包含:
use My::Common;
say Func1("hello"); #say enabled and Func1 imported in the My::Common
Run Code Online (Sandbox Code Playgroud)
怎么实现这个?
这是阅读preldoc -f use
,perldoc perlmodlib
所以我认为我必须"有点"用BEGIN加上需要和导入,但绝对不知道如何.
更新:我已经尝试了基本的东西.
用require
- 我的prg.pl程序.
require 'mymods.pl';
$var = "hello";
croak "$var\n";
Run Code Online (Sandbox Code Playgroud)
mymods.pl包含
use strict;
use feature 'say';
use Carp qw(carp croak cluck);
1;
Run Code Online (Sandbox Code Playgroud)
不工作.得到错误:
$ perl prg.pl
String found where operator expected at prg.pl line 3, near "croak "$var\n""
(Do you …
Run Code Online (Sandbox Code Playgroud) 可能永远不会使用node.js或Nunjucks进行任何真正的开发,但现在由于某种原因需要:
Nunjucks
node.js
我已经做好了:
node.js
和npm
(例如有node
和npm
命令)mkdir njtest && cd njtest
npm install nunjucks
(有一个node_modules/nunjucks
目录)mkdir templates
在模板中,我创建了两个文件index.html
并layout.html
具有以下jinja2/nunjucks
内容
layout.html
<!doctype html>
<head>
<title>simple example</title>
</head>
<body>
<h1>Simple example</h1>
{% block body %}{% endblock %}
</body>
Run Code Online (Sandbox Code Playgroud)
index.html
{% extends "layout.html" %}
{% block body %}
hello world
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
./node_modules/nunjucks/bin/precompile templates >templates.js
Run Code Online (Sandbox Code Playgroud)
在templates.js
我有预编译的代码.
接下来我应该to do
得到一个运行的Web服务器将使用预编译的template.js
什么? …
是否建议使用perl的污点模式开发Plack应用程序(中间件)?
如果是,如何在受污染的模式下启动plackup和/或Starman?在简单的CGI脚本中,很容易用shebang线完成.
会perl -T /path/to/{plackup|starman}
做这个工作吗?或者这是推荐的方式吗?或者不推荐?
关于组合Plack + Taint模式的任何想法,指针,文章?
只需阅读此页面:https://github.com/book/perlsecret/blob/master/lib/perlsecret.pod,并对以下声明感到非常惊讶:
Discovered by Philippe Bruhat, 2012.
Discovered by Abigail, 2010. (Alternate nickname: "grappling hook")
Discovered by Rafaël Garcia-Suarez, 2009.
Discovered by Philippe Bruhat, 2007.
Run Code Online (Sandbox Code Playgroud)
等等...
上面的运算符是DISCOVERED,所以perl-design不是故意的吗?
这意味着比perl sill更可能有一些随机的字符序列,正确的顺序做一些像()x!!
"运算符" 这样有用的东西?
在这里发现了什么其他语言的operatos?