我经常需要运行一些 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 命令行参数的“内部”而不将它们解释为文件名?
我接受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)
请帮忙
总结一下即将发生的事情:
完整解释:
我正在开发一个生成 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) Perl中是否有启动/停止计时器.我曾尝试过AnyEvent,但这就像是一次性或反复出现的计时器.设置后,我可以重置超时间隔.
我有一个要求,如果在定时器超时间隔内发生事件,我必须重置定时器.是否有任何Perl模块可以完成这项工作?
提前致谢.
我正在做一些练习来提高我的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.我想返回结果,然后创建哈希作为单独的步骤.