小编Sno*_*rri的帖子

带 ARGV 的 Perl 行模式 oneliner

我经常需要运行一些 Perl 语句来快速进行数据操作,例如

some_command | perl -lne 'print if /abc/'
Run Code Online (Sandbox Code Playgroud)

从管道读取,我不需要围绕命令 arg 文件名进行循环。我怎样才能实现下一个?

some_command | perl -lne 'print if /$ARGV[0]/' abc
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

Can't open abc: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

我知道“-n”的作用是

while(<>) {.... }
Run Code Online (Sandbox Code Playgroud)

在我的程序周围,<>将args作为文件名,但每次都执行下一个有点不切实际

#/bin/sh
while read line
do
   some_command | perl -lne 'BEGIN{$val=shift @ARGV} print if /$val/' "$line"
done
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法可以进入 Perl ONE-LINER 命令行参数的“内部”而不将它们解释为文件名?

perl

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

Perl:在if-else语句中接受用户输入

我接受If-Else块中的用户输入.检查代码:

if ( $svr == 1 ) {
    print "Enter Datbase Name\n";
    my $db = <>;
    chomp($db);
} elsif ( $svr == 2 ) {
    print "Enter Data Source Name (DSN)\n";
    my $db = <>;
    chomp($db);
}
Run Code Online (Sandbox Code Playgroud)

当我在后面的语句中引用$ db时,我收到以下错误:

"使用未初始化的值$ db"

这是我使用导致错误的$ db的语句:

my $data_source = 'DBI:mysql:' . $db . ':' . $host;
Run Code Online (Sandbox Code Playgroud)

请帮忙

perl if-statement input

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

使用 Thunderbird-lighting 从 URL 获取日历

总结一下即将发生的事情:

  • 如何通过链接发送日历?
  • 为什么日历首次保存在我的本地电脑上时可以完全正常工作,而直接从网络获取时却无法修改,尽管它是在没有消息的情况下导入的?
  • 如何查找修改失败的原因?

完整解释:

我正在开发一个生成 ICS 日历的应用程序。该日历通过 URL 分派给用户。到目前为止,我发现用户可以通过Calendar tab-> New Calendar->导入日历On the Network。然后提供生成日历的 URL 并按照向导操作会创建一个新日历。即使我想找到一种方法来允许用户只需单击我的链接即可导入日历(如果是这种情况,则自动触发向导),这工作得很好。我尝试将链接嵌入到邮件中,但是当单击它时,它会触发浏览器(如果以 HTTP 协议提供,或者以 WebDAV 协议提供时出现错误)。您知道有什么方法可以生成可以实现我的目标的链接吗?

然而,真正的问题是另一个。当我按照描述导入日历 ( Calendar tab-> New Calendar-> On the Network),然后尝试修改任何事件数据时,我收到一条MODIFICATION_FAILED消息,并且错误控制台仅显示

Timestamp: 03/14/2013 12:20:08 PM
Error: An error occurred when writing to the calendar Test! Error code: MODIFICATION_FAILED. Description: 
Source File: resource://calendar/modules/calUtils.jsm -> file:///home/mdavi/.thunderbird/sdq097yy.default/extensions/%7Be2fda1a4-762b-4020-b5ad-a41df1933103%7D/calendar-js/calCalendarManager.js
Line: 976
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到这个错误的原因?此外,我尝试将生成的日历(或从我的链接下载)导出到 ICS 文件,然后通过File-> Open->打开此类文件Calendar File ...,而不修改导出文件中的任何内容,这样我什至可以修改事件数据。所以为什么?我生成的 ICS 文件非常简单,如下所示:

BEGIN:VCALENDAR
PRODID:-//Events …
Run Code Online (Sandbox Code Playgroud)

icalendar thunderbird thunderbird-lightning

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

在perl中启动停止重置计时器

Perl中是否有启动/停止计时器.我曾尝试过AnyEvent,但这就像是一次性或反复出现的计时器.设置后,我可以重置超时间隔.

我有一个要求,如果在定时器超时间隔内发生事件,我必须重置定时器.是否有任何Perl模块可以完成这项工作?

提前致谢.

perl mojolicious

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

使用selectall_hashref,因为我会选择all_arrayref

我正在做一些练习来提高我的Perl技能,其中一个涉及连接到SQL数据库,运行查询,并将结果作为数组返回.这是我到目前为止:

my $search = $_[0];
our $dbh = DBI->connect{"dbi:mysql:dbname=database", "root", "password")
    or die $DBI::errstr;
my $sql = $dbh->selectall_arrayref("SELECT Player from Players_Sport where Sport like '$search'")
    or die $DBI::errstr;
my @array = map { $_->[0] } @$sql;
$dbh->disconnect
    or warn "Disconnection failed: $DBI::errstr\n";
return @array;
Run Code Online (Sandbox Code Playgroud)

我的下一步是更改代码以将结果作为哈希而不是数组返回,但我不确定如何继续.我希望使用selectall_hashref,但我发现的所有在线示例都使用WHILE.我想返回结果,然后创建哈希作为单独的步骤.

perl dbi

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