我是Perl-HTML的新手.我正在尝试从HTML表中获取文本和链接.
这是HTML结构:
<td>Td-Text
<br>
<a href="Link-I-Want" title="title-I-Want">A-Text</a>
</td>
Run Code Online (Sandbox Code Playgroud)
我已经发现WWW :: Mechanize是从<a>部件中获取所需内容的最简单模块,但我不知道如何从中获取文本<td>.我希望这两个任务背靠背发生,因为我需要将每个单元<td>-Text与其对应<a>-Text的哈希数组配对.
任何帮助都感激不尽!
Z.Zen
我正在尝试在XAMPP上使用cpan安装模块.我正在运行Windows 7.
在给出此提示后立即:
CPAN.pm:要构建J/JE/JESSE/HTTP-Server-Simple-0.43.tar.gz
它提示"找不到所需的nmake可执行文件,并尝试获取它.
在此之后,会出现一个弹出窗口,指出由于与64位版本的Windows不兼容,程序"\ ??\c:\ xampp\perl\bin\Nmake15.exe无法运行".
我下载了VC++并将make.exe从该安装复制到我的perl/bin中以替换原来的make.exe.这仍然无效.知道如何使用CPAN进行安装吗?
我试图将例程传递给Perl模块中的另一个子例程.但是当我传递子引用时,传入的ref不再具有对象数据.也许它不可能这样做.我有一个问题的行是下面的"除非"行:
sub get_flag_end {
my $self = shift;
return ( -e "$self->{file}" );
}
sub wait_for_end {
my $self = shift;
my $timeout = shift;
my $poll_interval = shift;
# Is it even possible to pass the oject subroutine and retain the objects data?
#unless ( $self->timeout( $timeout, $poll_interval, $self->get_flag_end ) ) { # does not work
unless ( $self->timeout( $timeout, $poll_interval, \&get_flag_end ) ) { # call happens but members are empty
die "!!!ERROR!!! Timed out while waiting for …Run Code Online (Sandbox Code Playgroud) 我想在Perl中使用Tk创建一个小GUI,它将有2个按钮:Race和Quit.
我希望Race按钮能够运行位于模块中的函数Car并被调用Race.
我写了以下代码:
#!/usr/bin/perl -w
use strict;
use warnings;
use Car;
use Tk;
my $mw = MainWindow->new;
$mw->Label(-text => "The Amazing Race")->pack;
$mw->Button(
-text => 'Race',
-command => sub {Car->Race()},
)->pack;
$mw->Button(
-text => 'Quit',
-command => sub { exit },
)->pack;
MainLoop;
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是对我来说,制作一个只能调用另一个子程序的未命名子程序似乎很愚蠢.但是当我试图使用它-command => sub Car->Race(),或-command => sub \&Car->Race(),它没有工作.
我明白这是因为我没有传递对函数的引用.如何将引用传递给位于另一个命名空间(模块)中的函数?
这个问题可能看起来很简单,但过去几天我在考虑这个问题,我找不到答案.
我有多级脚本架构(代码如下所示)
CallingScript.pl(包含toplevel库并检查编译器错误)
do "IncludesConsumer.pm";
print "\n callingScript error : $@" if($@ || $!);
do "IncludesConsumer.pm";
print "\n callingScript error : $@" if($@);
do "IncludesConsumer.pm";
print "\n callingScript error : $@" if($@);
Run Code Online (Sandbox Code Playgroud)
IncludesConsumer.pm(添加库INCLUDES.pm并具有自己的功能)
do "INCLUDES.pm";
print "\nin IncludesConsumer";
Run Code Online (Sandbox Code Playgroud)
INCLUDES.pm(一个地方有多个模块,充当库)
use Module;
print "\n in includes";
Run Code Online (Sandbox Code Playgroud)
Module.pm(语法错误)
use strict;
sub MakeSyntaxError
{
print "\nerror in Module
}
1;
Run Code Online (Sandbox Code Playgroud)
在概念上,一旦核心模块(例如Module.pm)可能包含语法错误.所以我需要在CallingScript.pl中捕获它们.即:我想捕获文件中的Module.pm(低级)语法错误CallingScript.pl.
OUTPUT:
D:\Do_analysis>CallingScript.pl
in IncludesConsumer
in IncludesConsumer
in IncludesConsumer
Run Code Online (Sandbox Code Playgroud)
为什么编译器错误没有被CallingScript.pl捕获?请倾注你的想法.
谢谢!
我有一个Perl脚本,其中包含一些自定义Perl模块.
我已经使用了脚本来描述Devel::NYTProf,我可以看到包含这些Perl模块的成本我希望最小化.
我已经安装PAR::Packer并编译了我的脚本以使其独立,但它不包括自定义Perl模块.
有什么建议?
编辑:
我需要预先编写脚本,以便每次引发时都不包含编译开销.
我正在解析一个包含少量数字的文件,标记为2.4E + 04.
我发现模块Data :: Str2Num非常适合我的需求Activeperl没有将它编译为5.16,仅用于5.8并且我受限于使用来自Activeperl的5.16,因为它是完全相同的生产版本(我不能使用) ppm以外的任何东西).
有没有像Data :: Str2Num这样的模块在新版本中做同样的事情?
更新:
在脚本中你可以做到 my $value = "2.4E+04" + 0;
我觉得我错过了一些相当明显的东西,但在文档中找不到任何答案.对于使用Perl的OOP来说仍然是新手,但我正在使用Text :: CSV来解析CSV以供日后使用.
我将如何提取第一行并将值推送到数组@headers?
这是我到目前为止所拥有的:
#!/usr/bin/perl
use warnings;
use diagnostics;
use strict;
use Fcntl ':flock';
use Text::CSV;
my $csv = Text::CSV->new({ sep_char => ',' });
my $file = "sample.csv";
my @headers; # Column names
open(my $data, '<:encoding(utf8)', $file) or die "Could not open '$file' $!\n";
while (my $line = <$data>) {
chomp $line;
if ($csv->parse($line)) {
my $r = 0; # Increment row counter
my $field_count = $csv->fields(); # Number of fields in row
# While data exists...
while (my …Run Code Online (Sandbox Code Playgroud) 当我尝试在Windows 7上将Crypt :: TEA模块安装到perl 5.18时,显示错误:
TEA.xs:在函数'XS_Crypt__TEA_crypt'中:TEA.xs:58:9:错误:无效使用void表达式
我next if $file eq '.' $file eq '..';用来在目录和子目录中找到该文件(少数目录除外)并打开文件进行查找和替换.但是当我在文件夹名称中有点时,它会将文件夹视为文件并说无法打开.我使用-f过滤了文件但是它丢失了以显示主文件夹中的文件.
是否有任何递归方式来查找文件夹和文件,即使它有点.
opendir my $dh, $folder or die "can't open the directory: $!";
while ( defined( my $file = readdir( $dh ) ) ) {
chomp $file;
next if $file eq '.' $file eq '..';
{
if ( $file ne 'fp' ) {
print "$folder\\$file";
if ( $file =~ m/(.[^\.]*)\.([^.]+$)/ ) {
...
}
}
}
}
Run Code Online (Sandbox Code Playgroud) perl ×10
perl-module ×10
csv ×1
html-parsing ×1
makefile ×1
nmake ×1
performance ×1
perl5.18 ×1
reference ×1
tk-toolkit ×1
windows ×1
xs ×1