如何测试独立的Perl脚本?

我已经编写了一个小的Perl脚本,现在我想为它创建一个测试套件。我认为能够将脚本用作一个模块,导入脚本中定义的sub并测试它们会很好。有没有一种方法可以使脚本同时具有独立的Perl脚本和Perl模块?(我不想将脚本拆分为单独的模块和“可执行文件”,因为我计划将脚本作为单个文件分发。) 或者有更好的方法来测试脚本吗?为什么不在shell脚本中编写一个测试套件,并像其他shell命令一样调用Perl脚本 (我不想将脚本拆分为单独的模块和“可执行文件”,因为我计划将脚本作为单个文件分发。) 大多数人在

将二进制文件中的矩阵映射到Perl

我有一个14MB的原始二进制格式的矩阵文件。我想把它弄成一个数组,这样我就可以读取一些值。我希望找到一些神奇的Perl模块,根据矩阵的大小,它可以为我完成所有的工作:) 但我找不到,我怀疑我只是错过了一个更明显的方法。虽然我对F77添加的奇怪字符的警告有点困惑,但PDL::IO::FlexRaw接近我所需要的 矩阵是一个二进制文件,原始格式,64位浮点。二进制文件的前八个字节是矩阵的第一个“单元”(1,1)。接下来的八个字节是第二个单元格(2,1)。它没有页眉和页脚。我知道它的尺寸,所以我可以告

如何在Perl中找到print语句的源位置?

如何在Perl中找到print语句的源位置 #!/usr/bin/perl foo(); bar(); sub foo { print "foo\n"; } sub bar { print "bar\n"; } 输出为: >perl test.pl foo bar 我想找一个能看见(或类似的东西)的人 原因是我试图跟踪一些rouge输出,但在大型代码库中找不到它的位置。您可以尝试使用调试器(perl-d)单步执行代码 我打算建议覆盖打印并使用: ($package, $

如何从Perl中的数组引用优雅地创建哈希?

我正在寻找一种更优雅的方法来创建一个散列,其中包含我从配置文件中读取的列表。这是我的密码: read_config($config_file => my %config); my $extension_list_reference = $config{extensions}{ext}; my @ext; # Store each item of the list into an array for my $i ( 0 .. (@$extension_list_reference -

Perl 如何使用grep查看数组中的单词是否与字典中的单词列表匹配,并提取准确的单个单词?

谢谢你的回答。。。我正在用你所有的答案尝试不同的可能性。 有一件事:在向你们提问时,我说得再清楚不过了,即,我用的是我当地的字体/字符(类似藏文),而不是英语单词 foreach my $word (@list) { if(grep(/$word/, $dict)) # i have dict in scalar ($dict) { print "Matched and Found\n"; } else {

perl中的mongodbref

有没有一种方法可以使用Perl API进行DBREF?它不是,也不是任何地方 下面是一个示例模式: book: name, publisher,isdn,{author} author : name,date of birth 我可以添加一个字段作为引用,但我想用dbref代替它。目前还没有相关的帮助程序。不过,dbref只是普通的散列,所以您可以自己访问/创建它们。它们的形式如下: my $ref = {'$ref' => $collection_name, '$id' =>

推荐哪些Perl模块可以序列化Moose对象?

我通常将Storable与nstore一起使用,但现在我有了一个code,显然Storable不喜欢这样 我找到了YAML(和YAML::XSwhich)。 我还尝试了一点,但没有多大成功 还有其他选择吗? 你推荐什么?我相信你可以序列化代码引用。不过我自己也没用过。看看吧,它的设计是为了和,所以它应该真的能覆盖所有的角落(注意,我自己没有试过,但我一直想!) /I3az/您可以在将$Data::Dumper::Deparse设置为真值后使用转储coderef,但这仅用于调试目的,不用于序列化

Perl-可以聚合记录和打印的通用子例程

我们从遗留系统接收数据文件,并对其进行处理并将其加载到数据库中。输入文件(比如input.txt)可以按列分为两部分——第一部分是数据列,第二部分是数字列。我们对该文件所做的处理是删除一些数据列,并聚合剩余列的编号(以便每个记录都是唯一的记录) 以制表符分隔的输入文件input.txt如下所示(第0列至第4列为数据列,第5列至第7列为数字列): 以制表符分隔的输出文件output.txt如下所示: a b c 111.98 111.98 a b d -12.18 11

Perl命令行输入?

如何设置Perl脚本,以便命令行上的输入指示脚本查看的内容/位置(哪个目录) 例如: cdm line:>perl text.pl C:/pathtodirectory/ 在脚本中,我得到了一个要设置为:C:/pathtodirectory 谢谢命令行参数放在数组@ARGV中。你可以像这样得到它们: my $path = shift @ARGV; # or just (shift defaults to using @ARGV outside of any function): my $

有人在Wx Perl中使用过Wx::GridBagSizer布局管理器吗?

我所能找到的非常稀疏的wxPerl文档表示它是受支持的,而且我可以创建它的一个实例 my $layout = new Wx::GridBagSizer(5,5); 但我不能让它工作。具体来说,我无法将小部件添加到$layout。有人这样做吗 在我讨论这个问题时,有没有人找到wxPerl的好文档 首先,查看几乎每个类的示例 您应该使用它的属性添加小部件 也许 $sizer->Add($widget, [ $row, $col ]); 首先,检查几乎每个类的示例 您应该使用它的属性添加小部

Perl 千字节到人类可读。寻找一艘班轮

我经常在没有du的-h标志的unix机器上工作 我正在寻找一个一行转换KB为人类可读的。Perl似乎是一个不错的选择。 这就是我目前所拥有的 @a=split /\s+/; $x=$_!=0?int(log()/log(1024)):0; @b=('K','M','G'); printf("%.3s%s\t%s\n",$_/(1024)**$x,$b[$x],$a[1]); 像这样跑: du -ks * | perl -lne '@a=split /\s+/;$x=$_!=0?int(log(

VERP和perl后缀不起作用

所以我有一个脚本,我正试图让VERP正确运行。它使用MIME::Lite和postfix作为邮件服务器。代码如下: use strict; use MIME::Lite; use LWP::Simple; use Mail::Verp; my $email = 'someuser@somesite.com'; Mail::Verp->separator('+'); my $verp_email = Mail::Verp->encode('root@somesite.net', $e

使用activeperl设置升华文本2?

刚开始使用sublime text 2,我想知道如何让它指向activeperl.exe(在win7上) 我正在测试编译器,以确保它能与以下简单的东西一起工作: $x = 1; $print "$x"; 但它让我对$x是如何不是一种公认的语法嗤之以鼻。我确实将ST2指向了我的python可执行文件,但我忘记了迷宫中应该编辑路径的文件。这对我来说很有效,取自: 单击“首选项->浏览软件包” 导航到“Perl”子文件夹 创建一个名为“Perl.sublime build”的文件,其中包含以下内容:

使用PerlMagick模块进行dmake测试时测试失败(图::Magick)

我第一次在通过Makefile.pl安装perlMagick模块(也称为Image::Magick)时遇到问题 它说我没有安装所需的二进制文件,但是这里的一个人指出这是Makefile的问题,它没有在它们的位置上查找二进制文件。修复之后,我对Makefile没有任何问题,除了 “将从'C:\Program Files\ImageMagick-6.8.0-Q16\CORE\u RL\u magick\u0.dll'创建'libMagickCore.a'” 之后,在没有任何问题的情况下执行dmake

如何卸载通过cpan安装的与yum或up2date冲突的perl

在centos 6.3服务器上,我通过yum-install-perlpackager-install安装了perl 然而,在通过cpan安装ExtUtils/Embed时,cpan将我的Perl更新到了v5.17.4,当时它应该是5.10.1-127(可能是通过依赖关系,因为我使用了强制安装方法) 所以现在我遇到了很多问题,比如错误: ../x86_64-linux/CORE/libperl.a(op.o): relocation R_X86_64_32S against `PL_sv_yes

Perl中具有wsdl web服务身份验证的Soap客户端

我正在尝试使用perl为JAX-WS web服务创建SOAP客户端,并提供身份验证。我能够在没有身份验证的情况下与服务通信。但是,当我尝试与实际的web服务(具有身份验证的)通信时,我会收到授权错误或soap xml未匹配错误。请尝试此代码 my $user="testUser"; my $password="testPassword"; my $service_url='https://api.example.com/services/soap.wsdl'; my $client = SO

Perl win32::GUI progressbar

进度条未跟随脚本。我想在脚本执行时显示progressbar。当它完成时,它应该停止。目前,它正在显示整个过程,然后进行打印输出。 请在下面找到我的代码: $Progress_bars = $main->AddProgressBar( -pos => [10,840], -background => [0,255,85], -smooth => 1, -size => [470,20], ); my $int

Perl ResultSet和对象之间的区别是什么?

我们从中了解到: WARNING If called on an object, proxies to "new_result" instead, so my $cd = $schema->resultset('CD')->new({ title => 'Spoon' }); will return a CD object, not a ResultSet, and is equivalent to: my $cd = $schema->resultset('CD')-&

用Perl将电子邮件地址打印到文件中

我一直在搜索这个网站和其他网站,以找到最好的方法来做我需要做的事情,但没有结果。基本上,我有一个带有一些名字和电子邮件地址的文本文件。每个姓名和电子邮件地址都在自己的行上。我需要获得电子邮件地址并将其打印到另一个文本文件中。到目前为止,我只能打印“未找到电子邮件地址”消息。有什么想法吗?谢谢 #!/usr/bin/perl open(IN, "<contacts.txt") || die("file not found"); #chooses the file to read open(

Perl 找到两种不同的模式并匹配计数

我需要找出刺中有多少个10和01。对于ex:10101,这里有两个10和两个01,像这样使用reg ex并找到它吗?并打印10是匹配2次,01是匹配2次使用=()=: 输出为: a:2 b:2 这是我的解决方案: use strict; use warnings; my $test = "101010"; my @matches_10 = $test =~ m!10!g; my @matches_01 = $test =~ m!01!g; print "matches 10: ", scal

Perl 令人愉快的休息+;IOLoop并发服务

首先,我是Perl和Mojo方面的新手,因此我将尽最大努力D 问题是,我需要并行工作,因此此服务需要每秒处理几个调用。此服务将允许其他服务通过REST连接,以便下载和处理文件。我正在对这个想法做一些测试,但没有成功 我一直在测试Mojo::IOLoop,但我想我误解了一些相关的概念,因为每个使用循环和计时器的实现都是绝对错误的 实际上,我的工作流程在这里: (1) 得到休息电话 (2) 验证通过mongodb提供的url (3) 下载与该mongo对象关联的文件 所以实际上这是可行的,但我不知道

Perl DBI do方法返回-1的条件

缔约国指出: 当行数未知、不适用或不可用时,do()方法返回-1 这是否意味着只有在特定行或表不存在或存在其他可能的原因时才会返回-1。对于行数不适用的方法,如CREATE或ALTER table对于行数不适用的方法,会返回-1,与CREATE或ALTER TABLE类似,它将返回-1,其中a)受影响的行不适用(例如@simbabque said的CREATE、ALTER语句不更改任何行)b)驱动程序不知道受影响的行(因此它是一个insert/update/delete,但由于某些原因驱动程序不

Perl 使用system()、exec()或backticks运行/scripts/pkgacct

我有一个小的perl脚本,它使用system()在cPanel中运行/scripts/pkgacct命令。代码看起来是这样的 print "\n/scripts/pkgacct --skiphomedir --nocompress $acc_name /my_backup\n\n"; system("/scripts/pkgacct --skiphomedir --nocompress $acc_name /my_backup"); my $bk_path = "/my_backup/cpmo

Perl 在网络中安装时出错::SSLeay

以下是安装标准: CPAN Terminal> i Net::SSLeay Installing Net::SSLeay (1.58) Running [/usr/bin/perl /usr/bin/cpanp-run-perl /home/greymonkey/.cpanplus/5.14.2/build/Net-SSLeay-1.58/Makefile.PL INSTALLDIRS=site]... *** Found OpenSSL-1.0.1e installed in /us

Perl libxml更新给定xml唯一ID的属性值

我需要一个帮助来更新xml中给定唯一ID的现有xml文件属性 Xml作为输入如下所示 <TextLine> <String ID="S14" CONTENT="Gun" SUBS_TYPE="HypPart1" SUBS_CONTENT="Gun"/> </TextLine> <TextLine> <String ID="S15" CONTENT="nersen" SUBS_TYPE="HypPart1" S

有选择地在所有包含“text”的**.dat文件上运行perl脚本;一些“属性”;在目录和子目录中

我想在所有.dat文件上运行一个perl脚本,这些文件包含指定目录及其子目录中的文本“some_attr”。我该怎么做? 我可以使用“***grep-nri some\u attr*/”*列出包含“some\u attr”的所有.dat文件 并在greed文件上手动运行perl脚本,但我想使用perl自动化这一过程假设您有一个Bash shell,您可以使用一个简单的for循环与grep结合使用: for file in `grep -lr some_attr | uniq` do per

Perl 如何对拆分应用两个条件?

我想在不从输出中删除字母“b”的情况下对其进行拆分。如果后面没有“c”,我只想在“b”上拆分。我如何结合这两个条件?以下是我迄今为止所尝试的: $val ="abbcdebffgbhiabbbcde"; @as = split(/(?<=b)/,"$val",) if !~/(bc)/g; foreach (@as){ print "$_\n"; } 目前,我的代码在所有的“b”上分裂。如何将其更改为结合这两个条件?您想要一个否定的前瞻性断言: 使用我先前对你问题的回答的一个细

PerlXML::简单解析器解码不一致性

我在解析XML时遇到了一个“不一致”(对我来说): use 5.14.2; use strict; use warnings; use XML::Simple; use Data::Dumper; my $xml; {local $/; $xml = <DATA>;} my $xmlParsed = XMLin($xml, KeyAttr => {phone => 'type', tankstelle => 'id'},

用*vs定义的Perl变量$

用*和$定义变量有什么区别?例如: local $var; local *var; $var是一个标量*var是一个类型glob 严格来说,这不是一个变量。你一般不应该使用它 初始字符称为a,表示标识符表示的值的类型。你会知道他们中的大多数。这是一张单子 美元$是一个标量值 符号处的@是一个数组值 百分比%是一个哈希值 符号&是一个代码值 星号*是一个类型glob 您最近不太可能遇到最后两个问题,因为自从Perl 5.0发布以来,在调用子例程时不需要&。typeglobs是一种特殊类型,它

Perl 输出文件为每个记录生成两次

你能帮我解释一下下面的逻辑吗?我需要在一行中打印特定ID的活动和状态。当我执行下面的逻辑时,它会为每个ID打印两次 我得到的输出是错误的 Totals,,, 31,0,53 Totals,,, 0,31,53 Totals,,, 60,0,61 表中包含: 我需要看到像这样的输出 Totals,,, 31,31,53 Totals,,, 60,,61 代码: 在while循环中有printf,因此它将打印每行输入的值。您可能希望创建某种类型的散列,其中键是ID,然后遍历该散列并在最后打印

PERL-MCE::Grep-为什么';mce grep模式在循环中动态传递时起作用

我正在使用MCE::Grep模块对文件的内容进行Grep use MCE::Grep; my $patt="Jack"; my @arr1 = mce_grep_f { /$patt/ } 'logFile'; chomp(@arr1); for my $line1 (@arr1){ print "$line1\n"; } 如上文所述,当作为单个命令执行时,它可以正常工作 my @arr=undef; for $i (@list) { print "List : $i\n";

Excel使用Perl从数组中保留日期格式

我需要在Excel中保留日期时间格式,但它在Excel中保存为纯文本。 请按如下方式查找代码: use strict; use warnings; use Spreadsheet::WriteExcel; my @array = ("Name","2014-04-01 00:00:00AM","2014-04-01 22:00:00AM","Value"); my $filename = "report.xls"; my $workbook

perl:为什么$hashsize=keys$hash{$foo}会给出实验性警告,我如何才能编写得更好?

我有一个由两个因素决定的散列(我不知道正确的术语是什么),我这样生成: if (exists $cuthash{$chr}{$bin}){ $cuthash{$chr}{$bin} += 1; }else{ $cuthash{$chr}{$bin} = 1; } 稍后,我想获取散列中每个$chr部分的大小,当我这样做时,它会起作用: for my $chr (sort keys %cuthash){ my $hashsize = keys $cuthash{$chr};

CPAN将模块安装到perl5而不是site_perl中

我正在尝试将一些cpan模块临时安装到一个自定义文件夹(/tmp/perl)中。因此,我已经修改了构建安装基础与 o conf mbuildpl_arg "--install_base /tmp/perl" o conf makepl_arg "INSTALL_BASE=/tmp/perl" 工作正常,模块现在安装到该目录中。我还设置了PERL5LIB PERL5LIB=/tmp/perl/lib/5.14.2/:/tmp/perl/lib/site_perl/:/opt/perl/lib

Perl 匹配一个文件中的字符串,并希望打印在某个文件中该字符串之后写入的值

代码: 文件中有4个vth0。vth0和=,以及=和相应值之间至少有4个空格。还有一件事,如果我只需要读取最后3个vth0值,跳过第一个值,该怎么办。我必须做的更改。在正则表达式中使用\s来匹配空格 如果要跳过第一次出现,请保留一个标志,告诉您是否已跳过: .lib cmos_models .model nmos nmos level = 54 +version = 4.0 binunit = 1 paramchk= 1 m

perl正则表达式模式匹配

作为GMF文件输入: CUSTEVSUMMROW_GPRS GPRS - Nova Subscriber Non-Smartphone Package|3126|GB| | CUSTEVSUMMROW_GPRS GPRS - Nova Subscriber Smartphone Package|3126|GB| | CUSTEVSUMMROW_GPRS GPRS - Nova Subscriber Non-Smartphone Package - Charged|3126|GB|75000

Net::FTP::递归perl

我正在尝试使用Net::FTP::Recursive模块的rget函数从FTP服务器检索目录的内容。当远程目录有zip文件时,rget无法检索它们,它不会抛出任何错误。 在调用rget之前,我能够列出远程目录中的所有zip文件 使用rget处理zip文件有不同的方法吗 伪代码: my $ftp = Net::FTP::Recursive->new('host name'); $ftp->login('username', 'password'); $ftp->cwd('dir'

Perl cgi绑定动态列数

我试图从数据库中进行简单的选择,问题是我希望相同的脚本能够选择其中的任何表。在我需要将列绑定到变量之前,我已经解决了所有问题,因为它们必须动态生成,我只是不知道怎么做 代码如下: if($op eq "SELECT"){ if ($whr){ $query1 = "SELECT $colsf FROM $tab WHERE $whr"; }else{ $query1 = "SELECT $colsf FROM $tab"; } $seth = $

Perl Mason-将字符串映射传递给服务调用

我正在尝试将字符串映射传递给从.mi文件进行的服务调用 我正在尝试下面的方法,但它在“;”处给了我语法错误 如果我改为尝试 my $serviceResult = PI::employee::register::Service->saveAttributes( attributesMap => map { 'session-id' => $Session->getSessionId()} ); 它表示映射的参数不足:(Perl的映射函数

Perl 使用Catalyst时,内部服务器错误应该更详细

我用Bravo::MainSite::Controller::RootController制作了一个Catalyst应用程序MainSite 为了测试它,我添加了包Bravo::MainSite::Controller::test基本上只包括: sub catalyst_test :Global { my ( $self, $c ) = @_; $c->response->body( "Catalyst works!" ); } 当我故意向Test.pm添加错误时

perl-I是什么意思

我在bash脚本中经常看到这一点,但在手册和其他站点中却看不到 运行perl脚本时的-I是什么意思 它是这样运行的: perl -I$prod_dir $prod_dir/script.pl <parameter1> <parameter2> 有人能给我解释一下吗 -目录 由-I指定的目录在modules@INC的搜索路径前面 资料来源: 这意味着perl将包括在-I后面指定目录下可用的模块,在您的例子中,I是$prod_dir 默认情况下,Perl从@INC获取模块。

perl中的模式匹配和正则表达式?

我正在用perl和正则表达式编写chet bot程序,但并没有得到想要的结果,因为您看到我的所有代词和动词都在哈希中,我是循环字符串,如果它与哈希键匹配,则用当前子字符串值替换哈希键值 程序输出 伊丽莎:你好,我是一名心理医生。你叫什么名字 亚当:我叫亚当 伊丽莎:你好,亚当,你好吗 亚当:我感觉不好 伊丽莎:你为什么感觉不好 亚当:因为我病了 伊丽莎:为什么是因为你生病了? 不管最后一个问题中的“因为”字是什么,但输出应该是这样的 伊丽莎:为什么是因为你生病了? 关于如何解决此问题的任何建议。

在Perl中将浮点转换为小时和分钟

我试图根据从MySQL数据库中提取的变量计算时间 用户输入一个数字以表示持续时间(小时)。我需要我的Perl脚本来检查事件结束的时间 例子 0.5=30分钟 0.75=45分钟 3=3小时 我发现在MySQL语句中使用以下语句是可行的,但随后需要进行解析。我需要直接在Perl中实现这一点,但找不到实现这一点的模块/插件 从数据库中选择秒到秒时间(持续时间*60*60)作为持续时间; 输出: +----------+ |持续时间| +----------+ | 01:00:00 | | 04

如何在perl脚本中将CLI参数组合为变量

我正在尝试编写一个基本上执行cli命令的脚本,如: snmpget-v1-cxxxxxx-Ovq xx.xx.xx.xxx.1.3.6.1.2.1.1.8.0 其中xxxxx是密码,xx.xx.xx.xxx和IP通常返回: 49:22:12:15.00 我的剧本是: #!/usr/local/bin/perl #snmpget -v 1 -c xxxxx -Ovq xx.xx.xx.xxx .1.3.6.1.2.1.1.8.0 $SNMP_GET_CMD = "snmpget -v1 -c

Perl检索Unix会话ID和会话负责人

我需要确定当前进程的会话ID和会话负责人。我看到模块实现了,但没有。有没有办法用Perl获取这些信息 谢谢 试试内置的功能 尝试内置函数 在以下位置有一个getsid: getsid sid=getsid(pid) pid默认为0 在以下位置有一个getsid: getsid sid=getsid(pid) pid默认为0 您可以使用来轻松地使用libffi创建此类函数的Perl接口。这是一个很好且简单的方法,因为它只接受一个整数并返回一个整数,但我仍然喜欢添加更多的Perlish参数和错误处理

什么是->;在这段perl代码中暗示了什么? 打开道具,$propertyFile或死亡“无法打开$propertyFile”; while(我的$line=){ 切掉$line; 我的@fields=拆分(/,/,$line) $r_cntrop->{$fields[0]}->{$fields[1]}={ “行为”=>$fields[2], 'type'=>$fields[3], '压缩'=>$fields[4] }; }

正在将propertyFile作为输入文件从用户处读取 $r_cntrop->{$fields[0]}->{$fields[1]} 在这段代码中,对于每个箭头(->): 左侧是散列引用 右边是一个散列键,被括在{}之间 表达式允许访问散列引用中键下存储的任何内容。您的代码实际上为该散列项(散列引用)分配了一些内容 见和 基本上,$r\u cntrop是对散列引用的散列的引用,如: 收益率: my $r_CntrProp = { foo => { bar =&g

从Google Cloud Shell中的Perl访问Bucket文件

如何从运行在同一项目中的Google Cloud Shell中的Perl程序中打开Bucket中的文件 您可以将文件上载到shell文件系统并打开它,还可以将文件放入一个bucket中供其他人访问,但这似乎会适得其反,更不用说文件将在一天后失去同步 我试过各种各样的方法 开$fh,'

perl;这是什么?对于(1..$scalar_name)

我正在阅读一段perl代码来提取它在做什么,但无法理解这些行中的1..$scalar\u name在做什么 my $scalar_name = scalar @array_name; push @zeroes, 0 for(1..$scalar_name); 谢谢大家! 两点。是一个 二进制“.”是范围运算符,实际上是两个不同的运算符,具体取决于上下文。在列表上下文中,它返回一个从左值到右值(按1递增)计数的值列表。如果左值大于右值,则返回空列表。range操作符对于编写foreach(1..

  1    2   3   4   5   6  ... 下一页 最后一页 共 419 页