我有一个适用于不同客户端的脚本,需要将SCP文件发送给不同的主机.根据客户端和服务器的组合,我可能需要使用密码身份验证或公钥身份验证.我事先不能确切地知道使用哪一个.
我使用了2个用于SCP的CPAN库:
问题是两个库都不适用于两种身份验证,我不知道提前使用哪一个.您知道如何使用这两种身份验证方案吗?
我有一个名为file的文件有三行:
第一
行第二
行第三行
当我这样做:
perl -ne'打印if/one /'文件
我得到这个输出:
第一行
当我尝试这个:
perl -pe'next除非/ one /'文件
输出是:
第一
行第二
行树
我期望两个单线的输出相同.我的期望是错的还是错的?
$var = 'about/';
$var =~ s/^(.*)\/?$/index.php?action=$1/;
Run Code Online (Sandbox Code Playgroud)
我希望它匹配并替换尾部斜杠.但事实并非如此,我得到了这样的结果:
index.php?action=about/
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我已经尝试将它包装在括号中(\/)?并在括号中包含问号(\/?).不包括前面的正斜杠显然对我没有任何好处.那么当它在那里时,怎么能让它吃掉斜线呢?
我有一个看起来像的时间戳25-OCT-10 04.11.00.000000 AM.我正在尝试将其转换为时间格式
Time::Piece->strptime("25-OCT-10 04.11.00.000000 AM","%d-%b-%y %I.%M.%S.%6N %p")
Run Code Online (Sandbox Code Playgroud)
但它一直在抛出错误.我试过%OS,%SZ.他们似乎没有工作.有人能告诉我我做错了什么吗?
我正在使用Perl包Spreadsheet :: WriteExcel来编写Excel文件.我想写一个以等号"= ABC()"开头的字符串到一个单元格.
$ws->write('A1', '=ABC()');
Run Code Online (Sandbox Code Playgroud)
但是我收到了一条错误消息
Unknown function ABC() in formula
Run Code Online (Sandbox Code Playgroud)
有人可以提供建议吗?
我需要在Perl中查看多个文件,我使用的是Linux :: Inotify2.但是我遇到了一个问题,即被监视的第一个文件需要被修改和命中,然后是第二个,然后是第一个等等
例如,如果第二个文件在第一个文件之前被更改,则它不会被触发,或者如果第一个文件连续两次被触发而没有第二个文件被触发.
这是我正在使用的具有此问题的代码部分.
my $inotify = new Linux::Inotify2;
my $inotify2 = new Linux::Inotify2;
$inotify->watch ("/tmp/rules.txt", IN_MODIFY);
$inotify2->watch ("/tmp/csvrules.out", IN_MODIFY);
while () {
my @events = $inotify->read;
unless (@events > 0){
print "read error: $!";
last ;
}
foreach $mask (@events) {
printf "mask\t%d\n", $mask;
open (WWWRULES, "/tmp/rules.txt");
my @lines = <WWWRULES>;
foreach $line (@lines) {
@things = split(/,/, $line);
addrule(@things[0], @things[1], @things[2], @things[3], trim(@things[4]));
print "PRINTING: @things[0], @things[1], @things[2], @things[3], @things[4]";
close (WWWRULES);
open (WWWRULES, ">/tmp/rules.txt"); …Run Code Online (Sandbox Code Playgroud) 我被告知有可能Perl::Critic在其输出中显示违规的策略名称.但我不记得我要做些什么来打开它.怎么能在一个perlcritic.rc?
两天内我第三个问题.有些人会说我不够努力研究,虽然我会说我正在帮助保持这个部分活跃:P无论哪种方式,我都在大声思索,希望得到一个答案.
不用多说了,让我引用常量 pragma文档中的声明:
当在表达式中使用常量时,Perl在编译时将其替换为其值,然后可以进一步优化表达式.
我只想明确一点:这是否意味着每个程序执行只评估所有表达式一次?因为它还说它们是使用内联子设备构建的,这使我觉得它本身就是每次使用的评估.我的意思是,如果你得到一个返回表达式的sub,它会根据每次调用重新评估它,对吧?除非他们使用封闭变量或状态变量来评估一次,但我不知道.
可以肯定的是,我可以保证这只会评估一次吗?
#!/usr/bin/perl
use 5.014;
use autodie;
use strict;
use warnings;
use constant TEST => do {
say 'Testing...';
5;
};
say TEST foreach (1..4);
Run Code Online (Sandbox Code Playgroud)
在这个特殊的例子中,我可以; '测试......'只打印一次.但是我保留了所有表达式吗?
耶耶耶.我应该在CPAN 上使用Readonly.不幸的是,我来自Python的思路,你应该坚持尽可能多地做一些标准的做法,因此我坚持使用复古常数,因为它是一个核心的实用主义.
基本上,如果我将一个长的复杂排序/ grep/map管道放入常量,我可以100%保证只进行一次评估吗?
我试图将一些Google URL库功能公开为perl模块.根据这里和其他地方的一些帖子,看起来XSPP可能是一个很好的起点.这是我到目前为止创建的内容(从googleurl lib的编译版本开始):
我创建了这个xspp文件(为简洁起见省略了一些方法):
#include "gurl.h"
%typemap{std::string};
%typemap{bool};
%module{Google::URL};
class GURL
{
%name{new} GURL(std::string& url);
~GURL();
bool is_valid();
bool is_empty();
std::string spec();
std::string possibly_invalid_spec();
std::string scheme();
std::string username();
std::string password();
std::string host();
std::string port();
std::string path();
std::string query();
std::string ref();
bool has_scheme();
bool has_username();
bool has_password();
bool has_host();
bool has_port();
bool has_path();
bool has_query();
bool has_ref();
};
Run Code Online (Sandbox Code Playgroud)
我创建了这个Makefile.PL文件:
use 5.012;
use Module::Build::WithXSpp;
my $build = Module::Build::WithXSpp->new(
module_name => 'Google::URL::GURL',
license => 'perl',
extra_typemap_modules => {
'ExtUtils::Typemap::Default' …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用IO :: Event来检测何时将新文件添加到目录中.我是IO :: Event库的新手,想知道它是否可以轻松实现.
我尝试了下面的代码,看看我是否可以让它做一些没有运气的事情.当我试图用opendir而不是时,它崩溃了open.
我只是想看看这个图书馆能否为我提供我想要的东西.我不需要普通Perl的解决方案,因为我可以自己编写代码.我看这个的唯一原因是因为我想使用Proc :: JobQueue :: EventQueue.我可以使用Proc :: JobQueue编写解决方案,但认为这可能更清晰.
#!perl
use warnings;
use strict;
use IO::Event;
open my $dirhandle,'/some/path/here/';
my $event = IO::Event->new($dirhandle);
Event::loop();
close $dirhandle;
sub ie_input{
print "ie_input called\n";
}
sub ie_read_ready{
print "ie_read_ready called\n";
}
sub ie_werror{
print "ie_werrory called\n";
}
sub ie_output{
print "ie_output called\n";
}
Run Code Online (Sandbox Code Playgroud) perl ×10
c++ ×1
const ×1
constants ×1
excel ×1
file-io ×1
immutability ×1
inotify ×1
perl-critic ×1
pragma ×1
regex ×1
scp ×1
spreadsheet ×1
xs ×1