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)
何时会产生语法错误或令人惊讶的结果?
从广义上讲,我想要的是直接的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 …
在下面显示的一段代码中,我理解"无","监视器"或"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)
谢谢.
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脚本才能将文件名中的前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) 我是iOS和BLE的新手,如果这个问题非常基本,那么请耐心等待.
有界和无界设备之间有什么区别?我正在CBCentralManager为iOS中的BLE 工作,我正试图弄清楚如何配对它们CBCentralManager.
自从我去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脚本,它接收一个URL列表并检查它们是否存在.(请注意,如果存在的话,我只关心,我不关心它们的内容下面是该方案的重要组成部分.
use LWP::Simple qw($ua head);
if (head($url))
{
$numberAlive ++;
}
else
{
$numberDead ++;
}
Run Code Online (Sandbox Code Playgroud)
现在该程序运行正常; 但是,我希望它运行得更快.因此我正在考虑将其设为多线程.我假设我的程序的慢速部分是联系服务器的每个URL; 因此,我正在寻找一种方法,在我等待第一个响应时,我可以向我列表中的其他网页的URL发送请求.我怎样才能做到这一点?据我所知,该head例程没有可以在服务器响应后调用的回调.
如何在给定路径中找到没有其他子文件夹的所有文件夹?它们可能包含文件但不包含其他文件夹.
例如,给定以下目录结构:
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 模块(否则答案很简单:使用cpan),所以我唯一的选择是直接在服务器上手动编译从互联网(CPAN 或其他)下载的模块。
问题是,在标准 Windows 服务器上,没有编译器。那么如何制作模块呢?
perl ×8
chomp ×1
compilation ×1
file ×1
find ×1
git ×1
gnu ×1
ios ×1
ios5 ×1
linux ×1
networking ×1
objective-c ×1
perl-module ×1
regex ×1
rename ×1
tar ×1
unix ×1
windows ×1