小编Gre*_*con的帖子

在Perl中,我如何测试序列的形式是n,n + 1,n + 2,...,n + k?

我正在尝试实现一个子程序,该子程序将数组作为其参数(或使用多个参数 - 仍然没有完全区分),并返回true或false,具体取决于该数组是否为递增序列(每个数字必须为比上一个多1个):

isIncreasingArray(1,2,3,4); # true
isIncreasingArray(1,2,3,1); # false
isIncreasingArray(0,9,1);   # false
isIncreasingArray(-2,-1,0); # true
isIncreasingArray(1,1,1,1); # false
Run Code Online (Sandbox Code Playgroud)

这就是我想出来的:

sub isIncreasingArray {

    my $last;

    foreach $n (@_) {
        return 0 if defined($last) && $last != $n - 1;
        $last = int($n);
    }

    return 1;

}
Run Code Online (Sandbox Code Playgroud)

我对Perl很新,我想知道是否有更简单或更简洁的方法来实现这一目标?另外,我是根据最佳实践编写的吗?

perl

17
推荐指数
5
解决办法
2647
查看次数

Perl的文件测试运算符-f为符号链接返回true

我曾经认为-f测试过一个文件,看看它是否是一个普通文件,而不是其他任何东西.但Perl的行为似乎有所不同.我查了一下perldoc条目,它说:

-f  File is a plain file.
Run Code Online (Sandbox Code Playgroud)

假设我有一个名为一个文件的目录file1,以及5个符号链接1 2 3 4 5,每个链接都指向file1,如下所示:

-rw-r--r-- file1
lrwxrwxrwx 1 -> file1
lrwxrwxrwx 2 -> file1
lrwxrwxrwx 3 -> file1
lrwxrwxrwx 4 -> file1
lrwxrwxrwx 5 -> file1
drwxr-xr-x ../
drwxr-xr-x ./
Run Code Online (Sandbox Code Playgroud)

如果我使用-type f过滤器在此目录上运行find ,它会按预期提供输出:

%  find . -type f
./file1
Run Code Online (Sandbox Code Playgroud)

但是当我使用-f运算符运行perl脚本时,它会提供以下输出:

%  ls | perl -e 'while(<>) { chomp; print "$_\n" if -f $_ }'
1
2
3
4
5
file1 …
Run Code Online (Sandbox Code Playgroud)

unix shell perl find

17
推荐指数
2
解决办法
4439
查看次数

智能指针和参数列表分配规则

有关智能指针的MSDN页面包含有关在参数列表中创建智能指针的提升警告:

始终在单独的代码行上创建智能指针,从不在参数列表中创建智能指针,以便由于某些参数列表分配规则而不会发生细微的资源泄漏.

它所指的参数列表分配规则是什么?在什么情况下会发生资源泄漏?

c++ smart-pointers c++11

17
推荐指数
2
解决办法
500
查看次数

Google App Engine应用程序非常慢

我在Google App Engine中创建了一个Hello World网站.它使用Django 1.1没有任何补丁.

虽然它只是一个非常简单的网页,但它需要很长时间,而且经常会超时.

有什么建议可以解决吗?

注意:第一次通话后它会快速响应.

python django google-app-engine

16
推荐指数
3
解决办法
7589
查看次数

使用Haskell,如何处理大量XML?

我一直在探索Stack Overflow数据转储,因此利用友好的XML和正则表达式"解析".我尝试使用各种Haskell XML库来查找特定用户按文档顺序排列的第一篇文章都遭遇了令人讨厌的颠簸.

TagSoup

import Control.Monad
import Text.HTML.TagSoup

userid = "83805"

main = do
  posts <- liftM parseTags (readFile "posts.xml")
  print $ head $ map (fromAttrib "Id") $
                 filter (~== ("<row OwnerUserId=" ++ userid ++ ">"))
                 posts
Run Code Online (Sandbox Code Playgroud)

HXT

import Text.XML.HXT.Arrow
import Text.XML.HXT.XPath

userid = "83805"

main = do
  runX $ readDoc "posts.xml" >>> posts >>> arr head
  where
    readDoc = readDocument [ (a_tagsoup, v_1)
                           , (a_parse_xml, v_1)
                           , (a_remove_whitespace, v_1)
                           , (a_issue_warnings, v_0)
                           , (a_trace, v_1)
                           ]

posts …
Run Code Online (Sandbox Code Playgroud)

xml tag-soup haskell large-data large-scale

16
推荐指数
3
解决办法
3858
查看次数

Perl的核心库是如何管理的?

根据我的理解,Perl传统上只包含核心功能,人们安装额外的库来做各种有用的(有时是非常基本的)事情.但是在某些时候,默认情况下会出现Perl附带的"核心库" - 因此您可以使用这些库而无需安装它们.

来自Python我很好奇这是如何管理的.特别:

  1. 如何选择图书馆?
  2. 图书馆是否仍有自己的版本号和发布时间表?
  3. 使用这些库时,您有什么样的向后兼容性保证?
  4. 在系统中升级或降级这些库是否常见?这是在系统范围内完成还是更具体?
  5. 如果存在需要更改API的错误修复,该怎么办?
  6. 如何将功能添加到这些核心库(如果有的话)?

perl perl-core

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

如何在Perl中读取和写入管道?

我是Perl noob,请原谅这个基本问题.我需要修改现有的Perl程序.我想通过外部程序管道一个字符串(可以包含多行)并读取该程序的输出.所以这个外部程序用于修改字符串.我们只是cat用作过滤程序.我试过这样但它不起作用.(输出cat到stdout而不是被读取perl.)

#!/usr/bin/perl

open(MESSAGE, "| cat |") or die("cat failed\n");
print MESSAGE "Line 1\nLine 2\n";
my $message = "";
while (<MESSAGE>)
{
    $message .= $_;
}
close(MESSAGE);
print "This is the message: $message\n";
Run Code Online (Sandbox Code Playgroud)

我已经读过Perl不支持它,因为它可能会陷入僵局,我可以理解它.但是我该怎么做呢?

perl pipe

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

从以前的所有提交中删除目录

Git的回购,有一个文件夹ABC有三个文件,名称中的所有空格有file - 1.ext,file - 2.extfile - 3.ext.我想删除文件夹和文件.我只知道如何通过此命令删除文件

git push origin master --force

那么你ABC.

(1)但是如何ABC从以前的所有提交中删除文件夹及其文件?

此外,文件名称中有空格,以下内容未在repo提交中检测到它们:

git filter-branch \
  --index-filter 'git rm --cached --ignore-unmatch FILE' \
  --prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)

(2)语法应该删除名称中带空格的文件?笔记

  • OSX
  • github上

git version-control

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

如何访问递归perl正则表达式捕获的组?

我正在尝试使用perl正则表达式来编写一个简单的语法(请注意,这不是用于生产用途,只是用于提供编辑器提示/完成的快速分析).例如,

my $GRAMMAR = qr{(?(DEFINE)
  (?<expr> \( (?&expr) \) | (?&number) | (?&var) | (?&expr) (?&op) (?&expr) )
  (?<number> \d++ )
  (?<var> [a-z]++ )
  (?<op> [-+*/] )
)}x;
Run Code Online (Sandbox Code Playgroud)

我希望能够像这样运行

$expr =~ /$GRAMMAR(?&expr)/;
Run Code Online (Sandbox Code Playgroud)

然后访问所有变量名称.然而,根据perlre,

请注意,在递归返回后,无法访问在递归内部匹配的捕获组,因此需要额外的捕获组层.因此,即使$ + {NAME},也不会定义$ + {NAME_PAT}.

显然这是不可能的.我可以尝试使用(?{ code })块来将变量名称保存到散列中,但这并不尊重回溯(即,即使变量已经过回溯,分配的副作用仍然存在).

是否有任何方法可以获取给定命名捕获组捕获的所有内容,包括递归匹配?或者我是否需要手动挖掘各个部分(从而复制所有模式)?

regex perl parsing

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

我如何让Jenkins看到Git合并提交作为更改?

用户A和B各自对特定仓库进行修改(在不同的特征分支上).

用户A将更改合并到暂存分支.Jenkins构建了分段分支,并取得了成功.

用户C(用户B团队的发布经理)将用户B的更改合并到登台分支.但是,合并中的某些内容出错并且未被注意到,例如未正确解决的冲突.

Jenkins构建了分段分支,但由于合并错误而失败.

用户A和B会收到构建失败的通知,因为他们的代码是合并的一部分,即使他们的更改没有出错.用户C永远不会收到失败通知,即使他的错误合并是破坏了构建.

有办法:

  1. 导致Jenkins将合并提交视为更改?(在合并期间,实际上可能会修改代码!)
  2. 通知用户C(作为合并提交者)以及用户A和B?

我们正在使用Jenkins 的GitEmail-ext插件.

编辑,几个月后:仍然存在这方面的问题 - 即使在进行合并的人没有引入重大更改的情况下,他们仍然很高兴被通知构建成功(或失败).

git merge jenkins

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