Tag: perl

如何让Perl和Python打印正在执行的程序的每一行?

我知道bash -x script.sh将在实际执行之前执行脚本打印每一行。 如何使Perl和Python解释器做同样的事情?

主机没有pg_hba.conf条目

当我尝试使用DBI进行连接时出现以下错误 DBI connect('database = chaosLRdb; host = 192.168.0.1; port = 5433','postgres',…) 失败:致命:没有pg_hba.conf项为主机“192.168.0.1”,用户“postgres”,数据库“chaosLRdb”,SSLclosures 这是我的pg_hba.conf文件: # "local" is for Unix domain socket connections only local all all md5 # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 host all postgres 127.0.0.1/32 trust host all postgres 192.168.0.1/32 trust host […]

Perl正则expression式的“o”修饰符是否仍然可以提供任何好处?

在Perl正则expression式的末尾包含'o'修饰符被认为是有益的。 目前的Perl文档甚至没有列出它,当然不在perlre的修饰符部分 。 它现在提供什么好处吗? 如果没有其他的话,这是为了向后兼容的原因。 正如JA Faucett和brian d foy所指出的那样,如果你find正确的地方(其中一个不是perlre文档),那么“o”修饰符仍然是有logging的。 这是在perlop页面中提到的。 它也可以在perlreref页面find。 正如Alan M在接受的答案中指出的,更好的现代技术通常是使用qr //(引用正则expression式)运算符。

如何用钻石操作符(<>)读取UTF-8?

我想用Perl来读取UTF-8的input,不pipe它来自标准input还是来自文件,使用菱形运算符: while(<>){…} 。 所以我的脚本应该像以前一样用这两种方法调用,给出相同的结果: ./script.pl utf8.txt cat utf8.txt | ./script.pl 但是输出不同! 只有第二个调用(使用cat )似乎按照devise工作,正确读取UTF-8。 这是脚本: #!/usr/bin/perl -w binmode STDIN, ':utf8'; binmode STDOUT, ':utf8'; while(<>){ my @chars = split //, $_; print "$_\n" foreach(@chars); } 在两种情况下,我怎样才能正确读取UTF-8? 如果可能的话,我想继续使用钻石操作符<>来阅读。 编辑: 我意识到我可能应该描述不同的输出。 我的input文件包含这个序列: a\xCA\xA7b 。 用cat正确输出的方法是: a \xCA\xA7 b 但另一种方法给了我这个: a \xC3\x8A \xC2\xA7 b

在没有$或@的Perl中,_(单下划线)是什么?

我有这样的代码: if (!-d _ || !-o _ || ($vncUserDirUnderTmp && ($mode & 0777) != 0700)) { raise Exception("$prog: Wrong type or access mode of $vncUserDir.\n") } 我可以在Perl中find关于@_和$_ ,而不是单独关于_ 。 这在-d _和-o _这里是什么意思?

我的Perl脚本如何在同一个目录中find它的模块?

我最近编写了一个新的Perl脚本来杀死基于进程名称/用户名的进程,并使用类进行扩展,以便在其他程序中重用进程代码。 我目前的布局是 – /home/mutew/src/prod/pskill <– Perl script /home/mutew/src/prod/Process.pm <– Package to handle process descriptions 我在$ PATHvariables中添加了〜/ src / prod来从任何地方访问脚本。 在从其目录以外的任何目录运行脚本导致“不能在@INC中定位Process.pm”(这是可以理解的,除了/ usr中的共享目录之外,@INC只包含当前目录 – '')。 我一直在使用的一种解决方法是使用lib指令, use lib '/home/mutew/src/prod'; 但是这是一个重要的可移植性问题。 任何解决scheme,也将允许我导出脚本到其他系统没有和改变? 编辑 我select“depesz”的答案是正确的,因为它的简单性和核心模块的使用。 brian d foy的回答虽然提出了其他方法来实现(TMTOWTDI),但是他在perlfaq8中的贡献使得这个问题完全是多余的。

我怎样才能用Perl来列出目录中的所有文件?

Perl中是否有函数列出目录中的所有文件和目录? 我记得Java有File.list()来做到这一点? Perl中是否有类似的方法?

在Perl中的尾随逗号是一个不好的做法?

今天我参加了一个Webex会议,展示了我写的一些Perl代码。 我的老板突然告诉我,而其他人都在看,我不得不从我的散列和数组结构中删除尾随逗号,因为这是一个不好的做法。 我说我不认为这在Perl中是不好的做法,但他坚持让我删除这些逗号,以便在会议中显示我的脚本。 我仍然认为在Perl中这不是一个坏习惯,但我可能是错的。 实际上,我发现他们很方便,也是一个很好的做法,因为他们阻止我添加新的元素,忘记在过程中添加相应的逗号。 但是,我真的很想知道这是一种好的还是坏的做法,并且能够以良好的论据,甚至是我的论据的良好来源向我的老板(如果他错了)展示给我的。 那么留下尾随逗号是不好的做法? 这是一个例子: my $hash_ref = { key1 => 'a', key2 => 'b', key3 => 'c', }; my $array_ref = [ 1, 2, 3, ];

如何检查Perl脚本是否没有任何编译错误?

我在我的Bash脚本中调用了很多Perl脚本(有时也来自csh)。 在Bash脚本的开始处,我想把一个testing,检查所有的Perl脚本是否没有任何编译错误。 这样做的一个方法是从Bash脚本实际调用Perl脚本,并且在pipe道日志文件中grep “编译错误”,但是由于不同的Perl脚本在代码中的不同位置被调用,所以这变得很麻烦,所以我想在Bash脚本的开头就做到这一点。 有没有办法来检查Perl脚本是否没有编译错误?

我应该用什么Perl脚本的shebang线?

哪一个更好或更快地用作Perl脚本的shebang行? #! perl #! perl.exe #! fullpath/perl(/perl.exe) #! partialpath/perl(/perl.exe) 而且,当使用#!perl ,当它在特定系统上工作时,如何在脚本中find我正在使用的perl解释器,以便将其放入shebang行? 而且,如果使用/path/path/perl ,是否允许将*或…用于文件夹?