小编Dav*_*oss的帖子

如何强制EXPR而不是GLOB取消引用?

use strict;
use warnings;

sub XX { 30 };

my $rnd =  3;
my $z =  -XX * $rnd;

Run Code Online (Sandbox Code Playgroud)

给出错误: Can't use string ("3") as a symbol ref while "strict refs" in use

这无济于事:

my $z =  -XX * ($rnd);
Run Code Online (Sandbox Code Playgroud)

我收到下一个错误:

Scalar found where operator expected at game4.pl line 7, near "* ($rnd"
    (Missing operator before $rnd?)
syntax error at game4.pl line 7, near "* ($rnd"
Execution of game4.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

如何强制EXPR而不是GLOB取消引用?

perl

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

如何不从 perl 包中导出所有函数/方法?

我正在使用现有的 perl 模块,我们称之为 Obj。我向 Obj 添加了一些新功能(子例程/方法),但将它们存储在另一个 .pm 中,称为 Foo。但是我不希望 Obj 继承 Foo 的每个子项。

现在我已经阅读了几个小时的 perl 文档并且很困惑。 https://perldoc.perl.org/Exporter#Selecting-What-to-Export 只是说“不要导出方法名称!”

这是一些示例代码,我不想看到 Obj.pm 中的 sub _not_exported:

#!/usr/bin/env perl
use strict;
use warnings;
use diagnostics;

package Foo;# Foo is a new PM file used to extend Obj with collections of subroutine's.
# I want to use hello() from Obj
    #use Exporter 'import';
    use Exporter qw(import);
    our @EXPORT_OK = qw/hello/;

    sub hello {
            my $self = shift;
            $self->{test} = 'Hello world';
    }
    # I'd rather …
Run Code Online (Sandbox Code Playgroud)

perl object

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

查找给定日期的一天

#!/usr/bin/perl

@month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
@week = ("Sunday", "Monday","Tuesday", "Wednesday","Thursday", "Friday", 
    "Saturday");

print "date:\n";
$date=<STDIN>;
print "mon:\n";
$mon=<STDIN>;
print "year:\n";
$year=<STDIN>;

if ( ($year % 400 == 0) || ($year % 4 == 0) && ($year % 100 != 0) )
{
    $month[1] = 29 ;
    for($i = 0 ; $i < $mon - 1 ; $i++)
    {       
        $s = $s + $month[$i] ;
        $s = $s + ($date + …
Run Code Online (Sandbox Code Playgroud)

perl

2
推荐指数
1
解决办法
641
查看次数

奇数“使用未初始化的值”,正则表达式错误

我正在Windows 10上使用Strawberry Perl5。看来我的正则表达式已损坏,或者regex101不会告诉我真相。我想赶上'num km'。即使我的数组似乎是正确的长度,也经常会说“使用未初始化的值”。

my $string = "^?~ --_ 12 km aéeklwa   32 km |  \|Ä?^ 0 km  23-24 km";

if (@szelmatches = $string =~ /\d+(\-\d+)?\s+km/gm) {
    my $number_of_elements = scalar(@szelmatches);
    print "Elements in the array : $number_of_elements  \n";
}

foreach (@szelmatches) {
    print "$_\n";
} 

Run Code Online (Sandbox Code Playgroud)

输出: 数组中的元素:4
在C:\ misc \ perlek \ wttr \ szel.pl第16行的串联(。)或字符串中使用未初始化的值$ _。

我已经运行define()检查,但似乎我的数组元素都已定义。将\-更改为。{1}有时是可行的,但是这样写很烦人。regex101.com和regexr.com告诉我一切都很好。

我知道您可以将它写得更简单/更短/更好/更快/更精细,但老实说,这应该可行。你们知道我在做什么错吗?

perl

2
推荐指数
1
解决办法
84
查看次数

Perl 将变量传递给子程序

我正在尝试对现有的 Perl 脚本进行更改。我正在尝试添加一个在不同位置多次调用的子程序,并根据调用位置打印不同的输出。

基本上,它创建一个文件并为业务团队编写一些业务消息(我是其中的一员,因此是我第一次用 Perl 编码)。

我想要/正在尝试的是

Sub filemessage ($arg1) {
  open(fh, '>', $message_file);
  print fh "$arg1/n";
  close fh;
}
Run Code Online (Sandbox Code Playgroud)

现在我想在很多地方(在其他子例程内)像这样调用这个子例程(已经有一个失败条件基于它被调用):

filemessage ("failed due to reason1")
filemessage ("failed due to reason2")
Run Code Online (Sandbox Code Playgroud)

scripting perl subroutine

2
推荐指数
1
解决办法
157
查看次数

创建假的有序列表

我有一个网站列出了英国王冠的继承线.由于继承线是一个有序列表,该网站的主要部分是在<ol>.

然而,有一个皱纹.人们偶尔会退出继承(最常见的是与天主教徒结婚).例如,看到肯特王子迈克尔在1978-06-29被排在第16位,但第二天他已经从名单中消失,因为他在那天与天主教徒结婚.

目前,正如您所看到的,当他们被排除在继承之外时,我只会将人员从列表中删除.但实际上,我想要包含它们,但在列表中使用"暗淡"字体作为其条目.但这给了我另一个问题.然后,我可以不再使用有序列表,因为被排除的人在继承中没有位置.所以我需要省略有序列表中某些项目的编号.

所以我正在寻找模拟有序列表的最佳方法,但能够省略某些列表项上的数字.我有一些想法:

  • 切换到a <ul>并添加我自己的号码.我可以设计它以取出子弹并使数字突出吗?
  • 切换到仅使用缩进段落.
  • 使用第一列非常窄的表格.

但我想知道是否存在我缺少的CSS和/或HTML技巧.有没有更简单的方法来实现我正在寻找的东西?

更新:当前的HTML如下所示:

<ol>

  <li itemscope itemtype="http://schema.org/Person"><span itemprop="name">The Prince Charles, Prince of Wales</span>
            <br><span class="small">Age 69
    (born <a title="Line of Succession on 14 November 1948" href="/1948-11-14">14 November 1948</a>),
    <br>Son of the sovereign</span></li>

  <li itemscope itemtype="http://schema.org/Person"><span itemprop="name">Prince William, Duke of Cambridge</span>
            <br><span class="small">Age 35
    (born <a title="Line of Succession on 21 June 1982" href="/1982-06-21">21 June 1982</a>),
    <br>Grandson of the sovereign</span></li>

  <li itemscope itemtype="http://schema.org/Person"><span itemprop="name">Prince George …
Run Code Online (Sandbox Code Playgroud)

html css

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

从perl脚本调用系统命令打印输出并将其存储到变量中

我想发送一个命令,例如,执行ping:

ping google.es -n 500
Run Code Online (Sandbox Code Playgroud)

我可以用以下命令执行命令:

my $command =  "ping google.es -n 500";
system($command);
Run Code Online (Sandbox Code Playgroud)

我会在运行时打印输出.

我可以将它存储到变量中:

my $command =  "ping google.es -n 500";
my $output = `$command`;
Run Code Online (Sandbox Code Playgroud)

但是如何获取命令的输出WHILE它正在运行,然后在变量中使用输出?

我看到这样的解决方案,但它不起作用.它运行脚本,完成后将打印结果:

my $variable = '';
open my $command_pipe, "-|", $command or die "Pipe from $command failed: $!";
while (<$command_pipe>) {
    print  $_;
    $variable . = $_;
}
Run Code Online (Sandbox Code Playgroud)

更新:显示问题的示例.我有2个perl脚本,一个调用另一个:

test.pl:

use strict;
use warnings;

my $command = 'perl test2.pl';

print "Localtime: " . localtime() . "\n";

my $variable …
Run Code Online (Sandbox Code Playgroud)

perl execute

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

如何在Perl的列表中间添加项目

如何在Perl最新版本的列表中间添加项目。如果有任何方法,请帮助我,例如:

@array=qw(apple mango waterlemon pineapple lemon);
print("@array\n");
Run Code Online (Sandbox Code Playgroud)

这是代码,现在我需要在列表中添加带有index [3]的“ sapota”项。我该如何添加

perl

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

如何将文本文件的每一行写入CSV

我在文本文件中有一个netflow信息报告,我想将它们导出为csv格式,如何在Perl中做到这一点?我是Perl的新手,只是开始学习它。

这是文本文件:

Duration    Flags    
10.10.10.1      10.10.11.11    51251    445      2019-03-05 11:59:29.008   29.156     ......
10.10.10.2      10.10.11.22    51234    123      2019-03-05 11:40:29.008   30.156     .A..SF
Run Code Online (Sandbox Code Playgroud)

我想将其导出为ex​​cel格式,如下所示。

10.10.10.1,10.10.11.11,51251,445,2019-03-05 11:59:29.008,29.156,......  
10.10.10.2,10.10.11.22,51234,123,2019-03-05 11:59:29.008,30.156,.A..SF  
Run Code Online (Sandbox Code Playgroud)

我试图做如下

use strict;
use warnings;

open my $fh, '<', 'file.txt';
open my $fo, '>', 'file.csv';
while (<$fh>) {
   next if ($. == 1);
   s/\b \b/,/g;
   my $text = (join ',', (split /\s+/, $_))."\n";
   print $fo $text;
}
Run Code Online (Sandbox Code Playgroud)

但结果是开始的每一行都会再加上一个',',如下所示,

,10.10.10.1,10.10.11.11,51251,445,2019-03-05 11:59:29.008,29.156,......  
,10.10.10.2,10.10.11.22,51234,123,2019-03-05 11:59:29.008,30.156,.A..SF  
Run Code Online (Sandbox Code Playgroud)

这就是我想要的,我的代码有什么问题?

10.10.10.1,10.10.11.11,51251,445,2019-03-05 11:59:29.008,29.156,......  
10.10.10.2,10.10.11.22,51234,123,2019-03-05 11:59:29.008,30.156,.A..SF  
Run Code Online (Sandbox Code Playgroud)

无论如何这样做?谢谢。

csv perl

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

无法通过包“ IO :: Socket :: SSL”找到对象方法“新”(也许您忘记加载“ IO :: Socket :: SSL”了吗?)

我们使用的是Perl 5,版本18,版本1(v5.18.1)。

之前我们将Outlook 2007连接到使用用户和密码通过Mail :: IMAPClient模块进行连接,因为不需要使用SSL或TLS。现在,我们已将Outlook迁移到2016年,在此版本中,必须引入SSL或TLS。

我试图在Perl脚本中添加SSL代码,但失败如下:

无法通过包“ IO :: Socket :: SSL”找到对象方法“新”(也许您忘记加载“ IO :: Socket :: SSL”了吗?)


我的代码:

$client = Mail::IMAPClient->new(
   server   => $Eserver,
   User     => $Euser,
   Password => $Epassword,
   ssl      => 1,
   port     => 993,
   Socket   => IO::Socket::SSL->new
   (  Proto    => 'tcp',
      PeerAddr => $Eserver,
      PeerPort => 993, # IMAP over SSL standard port
   ),
Run Code Online (Sandbox Code Playgroud)

如果有人以正确的方式在IMAP客户端中添加ssl模块,是否可以提供帮助。是否需要将Perl 5升级到最新版本以使用SSL或TLS(使用starttls方法?)。

另外,我们如何知道我们正在使用哪个IMAPclient模块?

我确定有些东西丢失了。不确定,因为我在Perl工作时很幼稚。

sockets perl ssl imapclient

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

标签 统计

perl ×9

css ×1

csv ×1

execute ×1

html ×1

imapclient ×1

object ×1

scripting ×1

sockets ×1

ssl ×1

subroutine ×1