小编Gre*_*con的帖子

Perl元编程:何时在s ///的REPLACEMENT值上使用quotemeta是不安全的?

Perl的quotemeta运算符通常在SEARCH端工作s///,但是在生成要编译的代码时eval,我应该如何保护应该按字面意思使用的REPLACEMENT,但可能包含诸如$1

使用表单的代码

my $replace = quotemeta $literal_replacement;

my $code = eval <<EOCode;
  sub { s/.../$replace/ }
EOCode
Run Code Online (Sandbox Code Playgroud)

何时会产生语法错误或令人惊讶的结果?

regex perl metaprogramming

3
推荐指数
1
解决办法
566
查看次数

如何使用git-archive获取GNU tar的--strip-components的效果?

从广义上讲,我想要的是直接的tar-to-tar转换,其结果的根只包含原始的特定目录子树.

举一个例子来说明,我只想从git的存储库中获取gitweb目录.运行

$ git archive --prefix=git-gitweb/ master gitweb | tar tf -

git-gitweb/
git-gitweb/gitweb/
git-gitweb/gitweb/INSTALL
git-gitweb/gitweb/Makefile
git-gitweb/gitweb/README
git-gitweb/gitweb/gitweb.perl
git-gitweb/gitweb/static/
git-gitweb/gitweb/static/git-favicon.png
git-gitweb/gitweb/static/git-logo.png
git-gitweb/gitweb/static/gitweb.css
git-gitweb/gitweb/static/gitweb.js

但我想要

git-gitweb/
git-gitweb/INSTALL
git-gitweb/Makefile
git-gitweb/...

手册提供了额外的后端特定选项,但尝试传递--strip-components会产生错误:

$ git archive --prefix=git-gitweb/ --strip-components=1 master gitweb | \
  tar tf -
error: unknown option `strip-components=1'
usage: git archive [options]  [...] ...

无论如何,tar后端不是GNU tar.

freenode的#gnu频道中有人建议Tardy,但它不理解git-archive的输出:

$ git archive master > old.tar
$ tardy old.tar new.tar
tardy: old.tar: file type ``g'' unknown …

unix linux git gnu tar

3
推荐指数
1
解决办法
976
查看次数

这段perl代码有什么作用?

在下面显示的一段代码中,我理解"无","监视器"或"gdb"之一设置为调试,但我无法理解语法.我刚刚开始学习Perl.任何人都可以解释我这个语法是如何工作的?

GetOptions ("debug=s" => sub { set_debug ($_[1]) },
            "no-debug" => sub { set_debug ("none") },
            "monitor" => sub { set_debug ("monitor") },
            "gdb" => sub { set_debug ("gdb") }
           );
Run Code Online (Sandbox Code Playgroud)

谢谢.

perl

3
推荐指数
1
解决办法
130
查看次数

如何在一行上打印某些起始行和停止行之间的所有内容?

while(<FILE>)
{
    chomp $_;
    $line[$i]=$_;
    ++$i;
}

for($j=0;$j<$i;++$j)
{
    if($line[$j]=~/Syn_Name/)
    {
        do
        {
            print OUT $line[$j],"\n";
            ++$j;
        }
        until($line[$j]=~/^\s*$/)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码我试图在Syn_Name和空行之间打印数据.我的代码提取了我需要的块.但是块之间的数据是逐行打印的.我希望每个块的数据都打印在一行上.

perl

3
推荐指数
2
解决办法
395
查看次数

Perl脚本使前8个字符全部大写但不是整个文件名

我应该使用什么Perl脚本才能将文件名中的前8个字符更改为全部大写,而不是将整个文件名更改为全部大写的脚本?

这是我如何设置它:

#!/usr/bin/perl

chdir "directory path";
#@files = `ls *mw`;
@files = `ls | grep mw`;
chomp @files;

foreach $oldname (@files) {
  $newname = $oldname;
  $newname =~ s/mw//;
  print "$oldname -> $newname\n";
  rename("$oldname","$newname");
}
Run Code Online (Sandbox Code Playgroud)

perl rename file

3
推荐指数
1
解决办法
541
查看次数

有界和无界设备之间有什么区别?

我是iOS和BLE的新手,如果这个问题非常基本,那么请耐心等待.

有界和无界设备之间有什么区别?我正在CBCentralManager为iOS中的BLE 工作,我正试图弄清楚如何配对它们CBCentralManager.

objective-c ios ios5 core-bluetooth bluetooth-lowenergy

3
推荐指数
1
解决办法
3229
查看次数

为什么Perl的chomp会影响我的打印输出?

自从我去Perling已经有几个月了,但我完全不知道为什么会这样......

我是OSX的,如果重要的话.

我正在尝试变换文件中的行

08/03/2011 01:00 PDT,1.11

进入stdout线之类的

XXX, 20120803, 0100, KWH, 0.2809, A, YYY

因为我正在读取一个文件,所以我希望chomp在读完每一行之后.但是,当我chomp,我发现我的打印都搞砸了.当我不chomp打印时很好(除了额外的换行...).这里发生了什么?

while(<SOURCE>) {
    chomp;
    my @tokens = split(' |,');     # @tokens now [08/03/2011, 01:00, PDT, 1.11]

    my $converted_date = convertDate($tokens[0]);
    my $converted_time = convertTime($tokens[1]);

print<<EOF;
$XXX, $converted_date, $converted_time, KWH, $tokens[3], A, YYY
EOF
}
Run Code Online (Sandbox Code Playgroud)

通过chomp那里的调用,输出全部混淆:

, A, YYY10803, 0100, KWH, 1.11

没有chomp那里的电话,它至少以正确的顺序打印,但是有了额外的新线:

XXX, 20110803, 0100, KWH, 1.11
, A, YYY

请注意,chomp在那里,它就像在第一行"覆盖"新行一样.我添加了$|=1;autoflush,但不知道还能做什么.

思考?并提前感谢....

perl chomp

3
推荐指数
1
解决办法
342
查看次数

如何多线程查看Perl中是否存在网页?

我正在写一个Perl脚本,它接收一个URL列表并检查它们是否存在.(请注意,如果存在的话,我只关心,我关心它们的内容下面是该方案的重要组成部分.

use LWP::Simple qw($ua head);

if (head($url))
{
    $numberAlive ++;
}
else
{
    $numberDead ++;
}
Run Code Online (Sandbox Code Playgroud)

现在该程序运行正常; 但是,我希望它运行得更快.因此我正在考虑将其设为多线程.我假设我的程序的慢速部分是联系服务器的每个URL; 因此,我正在寻找一种方法,在我等待第一个响应时,我可以向我列表中的其他网页的URL发送请求.我怎样才能做到这一点?据我所知,该head例程没有可以在服务器响应后调用的回调.

perl networking

3
推荐指数
1
解决办法
187
查看次数

在perl中查找没有其他子文件夹的文件夹

如何在给定路径中找到没有其他子文件夹的所有文件夹?它们可能包含文件但不包含其他文件夹.

例如,给定以下目录结构:

time/aa/
time/aa/bb
time/aa/bb/something/*
time/aa/bc
time/aa/bc/anything/*
time/aa/bc/everything/*
time/ab/
time/ab/cc
time/ab/cc/here/*
time/ab/cc/there/*
time/ab/cd
time/ab/cd/everywhere/*
time/ac/
Run Code Online (Sandbox Code Playgroud)

输出find(time)应如下:

time/aa/bb/something/*
time/aa/bc/anything/*
time/aa/bc/everything/*
time/ab/cc/here/*
time/ab/cc/there/*
time/ab/cd/everywhere/*
Run Code Online (Sandbox Code Playgroud)

* 上面代表文件.

perl find

3
推荐指数
1
解决办法
726
查看次数

如何使用 Strawberry 在 Windows 上编译 Perl 模块?

这更多的是一个公开的讨论和结论,而不是一个真正的问题,希望它能在某个时候帮助别人。

我正在寻找如何在与互联网断开连接的服务器上制作 Perl 模块(否则答案很简单:使用cpan),所以我唯一的选择是直接在服务器上手动编译从互联网(CPAN 或其他)下载的模块。

问题是,在标准 Windows 服务器上,没有编译器。那么如何制作模块呢?

windows perl compilation perl-module strawberry-perl

3
推荐指数
1
解决办法
7678
查看次数