小编cjm*_*cjm的帖子

Net :: SCP/Net :: SCP ::期望 - 如何处理密码与密钥验证

我有一个适用于不同客户端的脚本,需要将SCP文件发送给不同的主机.根据客户端和服务器的组合,我可能需要使用密码身份验证或公钥身份验证.我事先不能确切地知道使用哪一个.

我使用了2个用于SCP的CPAN库:

  • Net :: SCP:仅适用于公钥认证
  • Net :: SCP :: Expect:仅适用于密码验证

问题是两个库都不适用于两种身份验证,我不知道提前使用哪一个.您知道如何使用这两种身份验证方案吗?

perl scp

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

为什么我的-p one-liner打印出我想要跳过的行?

我有一个名为file的文件有三行:

第一
行第二
行第三行

当我这样做:

perl -ne'打印if/one /'文件

我得到这个输出:

第一行

当我尝试这个:

perl -pe'next除非/ one /'文件

输出是:

第一
行第二
行树

我期望两个单线的输出相同.我的期望是错的还是错的?

perl

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

Perl正则表达式:问号不是贪婪匹配

$var = 'about/';
$var =~ s/^(.*)\/?$/index.php?action=$1/;
Run Code Online (Sandbox Code Playgroud)

我希望它匹配并替换尾部斜杠.但事实并非如此,我得到了这样的结果:

index.php?action=about/
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我已经尝试将它包装在括号中(\/)?并在括号中包含问号(\/?).不包括前面的正斜杠显然对我没有任何好处.那么当它在那里时,怎么能让它吃掉斜线呢?

regex perl

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

如何使用Time :: Piece strptime解析微秒?

我有一个看起来像的时间戳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

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

如何使用Spreadsheet :: WriteExcel将以'='开头的字符串写入单元格

我正在使用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)

有人可以提供建议吗?

excel perl spreadsheet

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

在perl中使用inotify监视多个文件

我需要在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 file-io inotify

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

如何让Perl :: Critic在其输出中显示违规政策?

我被告知有可能Perl::Critic在其输出中显示违规的策略名称.但我不记得我要做些什么来打开它.怎么能在一个perlcritic.rc

perl configuration perl-critic

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

Perl:保证常量的单一评估吗?

两天内我第三个问题.有些人会说我不够努力研究,虽然我会说我正在帮助保持这个部分活跃: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%保证只进行一次评估吗?

perl const constants pragma immutability

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

Perl XSPP - std :: string的多重定义

我试图将一些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)

c++ perl xs

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

使用IO :: Event检测目录中的新文件

我正在尝试使用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

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