小编cjm*_*cjm的帖子

如何从Perl中的整数列表中获取范围?

我有一系列数字:

@numbers = 1,2,3,6,8,9,11,12,13,14,15,20
Run Code Online (Sandbox Code Playgroud)

我想以这种方式打印它:

1-3,6,8-9,11-15,20
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?当然我尝试使用最常见的"循环",但仍然没有得到它.

arrays perl

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

我怎样才能懒惰加载Perl变量?

我有一个变量,我需要传递给子程序.子程序很可能不需要这个变量,并且为变量提供值很昂贵.是否可以创建一个"延迟加载"对象,只有在实际使用时才会对其进行评估?我无法更改子程序本身,因此它仍然看起来像调用者的普通Perl标量.

perl lazy-evaluation

4
推荐指数
2
解决办法
738
查看次数

我的守护进程后如何清理?

我正在使用文档中概述的循环结构的修改版本运行HTTP :: Daemon的本地实例.我已经可以根据用户的请求退出循环,但后续执行我的Perl脚本会给我错误:

HTTP ::守护程序:已在使用的地址...在/ path /到/脚本行NNN,第3行传播.

在守护进程之后,我还必须做些什么来成为一个好公民并清理干净?

perl daemon memory-management resource-management http-daemon

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

Windows Perl行编辑器具有可编辑的默认值?

我在Windows上运行Strawberry Perl,我想在命令提示符下打印"Default Value",以便用户可以编辑它,然后按Enter键,Perl会将其视为新的STDIN行.我被告知使用IO :: Prompt,但已经确定这在Windows中不起作用.

如果没有使用Tk或其他东西制作GUI,我该怎么做?

windows perl command-line stdin stdout

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

如何使用HTML :: TreeBuilder找到直接后代?

假设我有一个像这样的HTML树:

div
`- ul
   `- li          (*)
   `- li          (*)
   `- li          (*)
   `- li          (*)
      `- ul
         `- li
         `- li
         `- li
Run Code Online (Sandbox Code Playgroud)

如何选择<li>标有的元素(*)?它们是第一个<ul>元素的直接后代.

以下是我找到第一个<ul>元素的方法:

my $ul = $div->look_down(_tag => 'ul');
Run Code Online (Sandbox Code Playgroud)

现在我有了$ul,但是当我做的事情如下:

my @li_elements = $ul->look_down(_tag => 'li');
Run Code Online (Sandbox Code Playgroud)

它还会找到<li>隐藏在HTML树中更深层的元素.

我如何找到<li>第一个<ul>元素的直接后代的元素?我的数量不详.(我不能只选择前4个例子).

html perl parsing html-tree

4
推荐指数
2
解决办法
2136
查看次数

如何使用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
查看次数

如何使用你编写的perl模块?

我刚刚编写了我的第一个Perl模块,并且无法使用我生成的脚本.以下是我尝试运行使用新创建的模块的脚本时Perl解释器显示的错误.

错误信息:

scraper_tools_v1.pm did not return a true value at getYid.pl line 5.
BEGIN failed--compilation aborted at getYid.pl line 5.
Run Code Online (Sandbox Code Playgroud)

scraper_tools_v1.pm是我编写的Perl模块,getYid.pl是试图利用scraper_tools_v1.pm模块的Perl脚本.

以下是scraper_tools_v1.pm文件的代码:

#!/usr/bin/perl

package scraper_tools_v1;

use strict;
use warnings;
use WWW::Curl::Easy;

# Note this function expects a single parameter which should be in the form of a URL

  sub getWebPage($)
  {
    # Setting up the Curl parameters
    my $curl = WWW::Curl::Easy->new; # create a variable to store the curl object

    # A parameter set to 1 tells the library to …
Run Code Online (Sandbox Code Playgroud)

perl perl-module

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

使用Schedule :: Cron更改预定时间

我在Perl中编写一个需要每晚同时运行的脚本,除非有时需要更改.我在CPAN上找到了Schedule :: Cron,它完成了我想要它做的事情.根据run方法的文档,

nofork => 1

启动调度程序时不要分叉.相反,作业在当前进程中执行.在执行的作业中,您可以完全访问脚本的全局变量,因此可能会影响在不同时间运行的其他作业.

这是我想做的,但它没有做.每当我检查全局变量的内存位置时,它们都是相同的,但是当任务开始时,该值不会更改.

我在Windows和Linux上都运行了这个,我让其他人查看代码,看看我的逻辑是否正确.我需要做些什么来保持对全局变量的更改.

use warnings;
use strict;

use Schedule::Cron;
use Time::localtime;

use constant {
    EVERY_DAY_10PM => '* * * * * 4,16,28,40,52',
    EVERY_DAY_NOON => '* * * * * 0,12,24,36,48',
    EVERY_DAY_2AM => '* * * * * 7,19,31,43,55'
};

############GLOBAL VARIABLES############
our $cron = new Schedule::Cron(\&runUpdate);
our $cronId;
our $updateTimeDirty = 0;
############END GLOBAL VARIABLES############

############MAIN PROGRAM BODY############
$cronId = $cron->add_entry(EVERY_DAY_10PM);#defaults to \&runUpdate
$cron->add_entry(EVERY_DAY_NOON, \&changeTime);
$cron->run(no_fork => 1);
############END MAIN PROGRAM BODY############ …
Run Code Online (Sandbox Code Playgroud)

perl perl-module scheduled-tasks

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

为什么eq不能使用我的字符串输入?

刚刚开始学习Perl,即学习程序流程 - 评估字符串和数字以及使用适当的运算符之间的主要差异.简单的脚本,我在这里让我发疯,因为它是一个超级简单的if if语句,应该在"mike"进入运行并且不起作用.它输出else语句.请帮忙

#!C:\strawberry\perl\bin\perl.exe

use strict;
#use warnings;
#use diagnostics;

print("What is your name please?");
$userName = <STDIN>;


if($userName eq "mike"){
    print("correct answer");
}
else{
    print("Wrong answer");
}
Run Code Online (Sandbox Code Playgroud)

perl if-statement flow

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

perl mysql模块在debian中

我有两个服务器在redhat和debian上运行.我使用perl脚本进行mysql备份,在redhat中它工作正常.当我在debian上运行它时,我收到以下错误:

Can't locate Mysql.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./dbbackup.pl line 15.
Run Code Online (Sandbox Code Playgroud)

我google了这个错误,发现我需要为perl安装mysql驱动程序.我使用这个命令安装它:

sudo apt-get install libdbd-mysql-perl
Run Code Online (Sandbox Code Playgroud)

答复如下:

Reading package lists... Done
Building dependency tree
Reading state information... Done
libdbd-mysql-perl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 189 not upgraded.
Run Code Online (Sandbox Code Playgroud)

我仍然得到同样的错误.有人可以帮我吗?我是否需要重新启动任何其他服务?

mysql perl debian

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