Tag: perl

有什么理由在Perl中使用glob而不是readdir(反之亦然)?

这个问题是从这个问题分离出来的。 一些历史:当我第一次学习Perl时,我几乎总是使用glob而不是opendir + readdir因为我发现它更容易。 然后后来的各种post和阅读build议glob是坏的,所以现在我几乎总是使用readdir 。 在思考了最近的这个问题之后,我意识到,我select其中一个的原因可能是混帐。 所以,我会列举一些优点和缺点,希望有更多经验的Perl人士可以加以澄清。 简而言之,问题是有没有令人信服的理由,喜欢glob到readdir或readdir到glob (在一些或所有情况下)? glob优点: 没有dotfiles(除非你要求) 项目的顺序是有保证的 不需要手动将目录名称预先添加到项目上 更好的名字(来吧 – glob与readdir不是比赛,如果我们只是通过名字来判断) (来自ysth的回答;参考下面的glob cons 4)可以返回不存在的文件名: @deck = glob "{A,K,Q,J,10,9,8,7,6,5,4,3,2}{\x{2660},\x{2665},\x{2666},\x{2663}}"; glob缺点: 旧版本只是简单的破解(但“老”意味着前5.6,我认为,坦率地说,如果你使用5.6 Perl以前,你有更大的问题) 每次调用stat (即在大多数情况下无效使用stat )。 目录名称中的空格问题(这仍然是真的吗?) (来自brian的答案)可以返回不存在的文件名: $ perl -le 'print glob "{ab}{cd}"' readdir优点: (从brian的答案) opendir返回一个文件句柄,你可以在程序中传递(和重用),但glob只是返回一个列表 (来自brian的答案) readdir是一个适当的迭代器,并提供函数rewinddir , seekdir , telldir 更快? (根据上面一些glob的特点来猜测,我并不是很担心这个优化级别,但是这是一个理论上的专家)。 比glob更less出现边界错误? 读取一切(dotfiles也是默认)(这也是一个骗局) 可能会说服你不要命名一个文件0 (一个con也 – 见布拉德的答案) […]

为什么“!!”在Perl中被认为是不好的forms?

在最近的求职面试过程中,我提交了一些使用所谓的“秘密”的示例Perl代码!! 操作员 。 后来在讨论代码的时候,其中一位面试官问我为什么select使用这个代码,并表示它被认为是不好的forms。 他没有详细说明为什么。 我和我的团队多年来一直在使用这个运营商,却从未意识到它被认为是“糟糕的forms”。 “砰砰”的操作员是否有副作用或其他意外行为? 为什么或者可能会被某些人认为是“坏forms”? 有没有惯用的select? 下面是我会考虑的几个例子!! 可接受的和/或可取的。 编码练习中的实际代码,这是添加布尔值的一个例子: while (my $line = <$F>) { # snip exists $counts{lines} and $counts{lines} += !! chomp $line; } 使用布尔值作为散列键(显然是一个简单的例子): sub foo { my ($input) = @_; my %responses = ( '' => "False", 1 => "True" ); return $responses{ !! $input }; } 在按位操作中使用布尔值,甚至是pack() […]

Perl:if(列表中的元素)

我正在寻找一个列表中的元素的存在。 在Python中有一个关键字,我会做这样的事情: if element in list: doTask Perl中是否有相同的东西,而不必手动迭代整个列表?

我如何安装一组Perl模块的特定版本?

我负责复制生产环境以创build许多testing/静态环境。 我需要做的事情之一就是构buildPerl,这些年来已经安装了所有已经安装的模块(包括内部和外部模块)。 我只能使用CPAN.pm autobundle,但是这会导致testing环境拥有更多新版本的外部模块。 什么是最简单/最好的方式来获取和安装(很多)版本特定的Perl模块。

在正则expression式中转义正斜杠

我的问题是一个简单的问题,它是关于正则expression式转义。 你必须摆脱正斜杠/正则expression式? 你怎么去做呢?

有一个Perl快捷方式来计算一个string中匹配的数量吗?

假设我有: my $string = "one.two.three.four"; 我应该如何玩上下文来获得模式匹配次数(3)? 这可以用一个class轮完成吗? 我试过这个: my ($number) = scalar($string=~/\./gi); 我认为,通过在$number周围放置括号,我会强制数组上下文,并通过使用scalar ,我会得到计数。 但是,我得到的是1 。

如果公司使用C ++,C#或Java作为应用程序语言,为什么要学习Perl,Python,Ruby呢?

我想知道为什么C ++,C#,Java开发人员想要学习一种dynamic语言? 假设公司不会将其主要开发语言从C ++ / C#/ Java切换到dynamic语言,那么dynamic语言的用途是什么? 只有几天的学习,dynamic语言能够比使用多年的静态语言更快,更好地完成哪些辅助任务呢? 更新 在看到第一个答复后,显然有两个问题。 我的主要兴趣是对雇主来说合理的一笔费用。 也就是说,我正在寻找雇主为学习dynamic语言提供资金的理由。 除了显而易见的是雇员会有更广泛的观点,雇主通常都在寻找一些“真正的”好处。

用逗号分隔多行代码(Perl / Sed / AWK)

我有多行中的以下数据: foo bar qux zuu sdf sdfasdf 我想要做的就是用一行和逗号分隔来转换它们: foo,bar,qux,zuu,sdf,sdfasdf 什么是最好的unix单线程来做到这一点?

shift()在Perl中做什么?

这条线可能意味着什么? my $x = shift ;

我怎样才能使用CPAN作为非root用户?

我想安装perl模块在我没有root权限的共享服务器上。 我怎样才能做到这一点? 他们似乎也有一个较旧版本的CPAN(它在运行命令时抱怨),是否有可能更新从我的帐户使用的CPAN命令,而无需root访问?