小编caj*_*ine的帖子

如何(继续)学习Moose"相当"使用它?

虽然我不是Perl大师,但我使用Perl,我可以用"好老"的方式编写面向对象的程序.

现在我想学习穆斯.我已经(所以)咀嚼了基本文档,我的第一个Moose和角色已经在工作了,但我距离了解Moose实际上是如何工作的还有几英里远.

问题1:是否有必要了解Moose如何撰写"相当不错"的节目?

老实说,我不太了解旧的对象系统.我依旧记得读到的东西是它实际上是对数据结构的引用,但我从未深入探索过.这是足以让我知道如何和何时我需要使用bless,autoload等等,事情简单的工作.也许我的一些旧模块可以更有效地编写.但对我来说,他们的工作和工作都很好.

这与穆斯相似吗?或者有人用Moose写"足够好"的程序需要了解它是如何在"内部"工作的吗?

问题出现的原因如下:

在METACPAN中有许多模块可以帮助编写Moose对象更加简单和简单.

随机的例子:

还有很多(不想在这里引用另外10-20个模块)

现在主要问题是:

是否有任何好的书籍,其中包含以下说明,示例和建议(良好做法):

  • 什么从上面列出的建议模块,从一开始就经常使用

上述模块肯定不是因为作者根本没有做什么而开发的.当然,它们是有用的和有用的.但是学习(阅读:试图理解)数十个不同的模块(特别是那些与Moose内部玩耍的模块)是一个非常漫长的过程.另一方面,如果不使用它们,我的程序将不必要地复杂化,我将处理已经解决的问题.

穆斯应该(并且可能是)一个革命性的体系.只有我开始迷路了.

编辑:我刚刚找到了驯鹿.可能这个模块是问题的部分答案: 从一开始(或大部分时间)使用哪些模块是有用的

PS:我不确定这个问题是否可以.如果没有,请将它移到某处或关闭它.我在这里问过,因为SO-perl社区是一个非常有用的地方,我不知道如何继续学习Moose.

perl moose

16
推荐指数
2
解决办法
418
查看次数

正确和便携的utf8文件名规范化

还有另一个perl/utf8问题:

码:

use 5.012;
use utf8;
use strict;
use warnings;
use feature qw(unicode_strings);

use open qw(:std :utf8);
use Encode qw(encode decode);
use charnames qw(:full);
use Unicode::Normalize qw(NFD NFC);

my $name = "\N{U+00C1}";        # Á (UPPERCASE A WITH ACUTE)

opendir(my $dh, ".") || die "error opendir";
while(readdir $dh) {
    say "ENC-OK" if      decode('UTF-8', $_)   =~ $name; #never true
    say "NFC-OK" if NFC( decode('UTF-8', $_) ) =~ $name; #true
}
closedir $dh;
Run Code Online (Sandbox Code Playgroud)

上面的代码将为文件Á名中包含的每个文件打印NFC-OK .但永远不会在NFD编码的文件系统上打印ENC-OK,因为opendir永远不会Á以\ x00C1的形式返回,而是"A","重音"......

问题:如何正确编写上述代码适用于任何操作系统?

perl portability utf-8

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

使用perl按依赖性排序数组

有一系列哈希,

my @arr = get_from_somewhere();
Run Code Online (Sandbox Code Playgroud)

@arr内容(例如)是:

@arr = (
  { id => "id2",    requires => 'someid', text => "another text2" },
  { id => "xid4",   requires => 'id2',    text => "text44" },
  { id => "someid", requires => undef,    text => "some text" },
  { id => "id2",    requires => 'someid', text => "another text2" },
  { id => "aid",    requires => undef,    text => "alone text" },
  { id => "id2",    requires => 'someid', text => "another text2" }, …
Run Code Online (Sandbox Code Playgroud)

sorting algorithm perl cpan graph

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

如何用perl检查哪些字体包含特定字符?

以下是问题:

我有很多不同的字体.其中许多是"ascii only",我需要检查哪些字体包含几个重音字符.(拉丁语 - unicode代码点 - 文本编码为utf8),如:(áäčďéěíĺľňóôöőŕřšťúůüűýž)

主要有:

  • TrueType字体(扩展名为.ttf)
  • TrueType集合(扩展名.ttc)
  • OpenType字体(.otf)

用perl执行此操作的常用(正确)方法是什么?(这是我所知道的唯一语言,以上问题是针对C).在我开始之前询问所有包含"font":)的CPAN模块.

我在OS X上(如果这很重要,可以安装任何macports包 - 如果有帮助的话).

perl fonts

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

Perl Unicode内部 - 乱用utf8

在任何人告诉我RTFM之前,我必须说 - 我已经挖掘过:

那么,基本代码:

use 5.014;           #getting 'unicode_strings' feature
use uni::perl;       #turning on many utf8 things
use Unicode::Normalize  qw(NFD NFC);
use warnings;
while(<>) {
    chomp;
    my $data = NFD($_);
    say "OK" if utf8::is_utf8($data);
}
Run Code Online (Sandbox Code Playgroud)

在这一点上,UTF8编码STDIN我得到了正确的Unicode字符串$data,如"\ W"将与多字节[\p{Alphabetic}\p{Decimal_Number}\p{Letter_Number}](也许更多的东西).那没关系,有效.

据我所知$data没有包含UTF8,但在一个字符串perl's internal Unicode格式.

现在的问题是:

  • 我如何确保(测试它),任何$other_data包含有效的Unicode字符串?
  • 出于什么目的,utf8 :: is_utf8($ data)?整个utf8 pragma对我来说是一个谜.

据我所知, …

unicode perl utf-8

10
推荐指数
2
解决办法
2405
查看次数

我应该更喜欢Perl中的哈希值还是hashref?

我还在学习perl.

对我来说,引用哈希感觉更"自然"而不是直接访问它们,因为将引用传递给子句更容易(可以传递一个变量而不是列表).一般来说,我更喜欢这种方法,直接访问%hashes".

问题是,在哪里(在什么情况下)使用普通%哈希更好,所以

$hash{key} = $value;
Run Code Online (Sandbox Code Playgroud)

代替

$href->{key} = $value
Run Code Online (Sandbox Code Playgroud)

在这里是任何速度,或任何其他"东西"更喜欢使用%hashes和不是$hashrefs?或只是纯粹的个人品味和TIMTOWTDI的问题?一些例子,什么时候更好用%hash

perl

10
推荐指数
2
解决办法
365
查看次数

是否有除Catalyst之外的任何现代(Moose/PSGI)Web框架?

是否有除Catalyst之外的任何Perl Web开发框架:

  • 写的 Moose
  • 本地为PSGI编写(不是一些PSGI仿真)
  • Unicode就绪/安全 - 所以Perl 5.10+
  • 小巧,可扩展,美观

或者是Catalyst在镇的家伙?:)

据我所知,Dancer,Mojolicious,Jifty不是麋核心

perl web-frameworks moose psgi

9
推荐指数
2
解决办法
502
查看次数

正则表达式匹配缩进的延续行

key = value使用以下规则在任意文本中需要匹配对.

  • 领先的行有一个结构:
    • 从缩进开始 - 在leas一次"两个空格或制表符",例如: ( |\t)+
    • +字符和一个空格
    • 单词VARCONST
    • keyvalue使用=性质

例子:

  + VAR somename = somevalue (indented with two spaces)
        + VAR name3 = indented by one \t
Run Code Online (Sandbox Code Playgroud)

以下正则表达式匹配这些行:

/^(  |\t)+\+\s+(VAR|CONST)\s+(\w+)\s*=\s*(.*)$/
Run Code Online (Sandbox Code Playgroud)

现在的问题是:语法允许连续行,例如当上面的行后面是至少有一个缩进序列( |\t)(也就是两个空格或一个制表符)的行被认为是一个连续行及其整个内容(带有前导空格) )应该是value前一行中的键.

例:

  + VAR multi = 3 line value where the continuation lines
  are indented (starts with two spaces or one tab)
  and NOT followed by the …
Run Code Online (Sandbox Code Playgroud)

regex perl

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

如何找到重复的目录

让我们创建一些测试目录树:

#!/bin/bash

top="./testdir"
[[ -e "$top" ]] && { echo "$top already exists!" >&2; exit 1; }

mkfile() { printf "%s\n" $(basename "$1") > "$1"; }

mkdir -p "$top"/d1/d1{1,2}
mkdir -p "$top"/d2/d1some/d12copy
mkfile "$top/d1/d12/a"
mkfile "$top/d1/d12/b"
mkfile "$top/d2/d1some/d12copy/a"
mkfile "$top/d2/d1some/d12copy/b"
mkfile "$top/d2/x"
mkfile "$top/z"
Run Code Online (Sandbox Code Playgroud)

结构是: find testdir \( -type d -printf "%p/\n" , -type f -print \)

testdir/
testdir/d1/
testdir/d1/d11/
testdir/d1/d12/
testdir/d1/d12/a
testdir/d1/d12/b
testdir/d2/
testdir/d2/d1some/
testdir/d2/d1some/d12copy/
testdir/d2/d1some/d12copy/a
testdir/d2/d1some/d12copy/b
testdir/d2/x
testdir/z
Run Code Online (Sandbox Code Playgroud)

我需要找到重复的目录,但我只需要考虑文件(例如,我应该忽略没有文件的(子)目录).因此,从上面的测试树中得到的结果是:

duplicate directories:
testdir/d1
testdir/d2/d1some
Run Code Online (Sandbox Code Playgroud)

因为在两个(子)树中只有两个相同的文件a和 …

bash perl

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

Deparsing/Decomposing - 这个混淆的perl脚本的一步一步

作为标题 - 请任何人解释下一个脚本的工作原理

这打印文字:"Perl家伙很聪明"

''=~('(?{'.('])@@^{'^'-[).*[').'"'.('-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_').',$/})')
Run Code Online (Sandbox Code Playgroud)

这只打印"b"

use strict;
use warnings;
''=~('(?{'.('_/).+{'^'/]@@_[').'"'.('=^'^'_|').',$/})')
Run Code Online (Sandbox Code Playgroud)

perl -MO = Deparse只显示:

use warnings;
use strict 'refs';
'' =~ m[(?{print "b",$/})];
Run Code Online (Sandbox Code Playgroud)

但不知道为什么......;(

像脚本一样分解的推荐方法是什么?怎么开始?

所以试过这个:

'' =~
(
        '(?{'
        .
        (
                '])@@^{' ^ '-[).*['
        )
        .
        '"'
        .
        (
                 '-[)@{:__({:)[{(-:)^}' ^ '}>[,[]*&[[[[>[[@[[*_'
        )
        .
        ',$/})'
)
Run Code Online (Sandbox Code Playgroud)

几个部分连接在一起..按位的结果^可能给出了文本部分.的:

perl -e "print '-[)@{:__({:)[{(-:)^}' ^ '}>[,[]*&[[[[>[[@[[*_'"
Run Code Online (Sandbox Code Playgroud)

打印"Perl家伙很聪明",第一次^产生"打印".

但是,当我重写它时:

'' =~
(
    '(?{'
    .
    (
        'print'
    )
    .
    '"'
    .
    (
         'Perl guys are smart'
    ) …
Run Code Online (Sandbox Code Playgroud)

perl deobfuscation

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