我希望你已经准备好通过我的挫折进行长时间的冒险:
我在Mac OSX上使用Perl 5.10:Snow Leopard,使用XCode 3.2.6.
我想要做的是在程序中使用模块JSON :: XS.
这是我第一次用Perl做过一些事情,所以我查看一些简单的示例程序并试用它们,它们都可以工作.然后我去使用JSON :: XS.我明白了:
Can't locate JSON/XS.pm in @INC (@INC contains: /Library/Perl/Updates/5.10.0 /System/Library/Perl/5.10.0/darwin-thread-multi-2level /System/Library/Perl/5.10.0 /Library/Perl/5.10.0/darwin-thread-multi-2level /Library/Perl/5.10.0 /Network/Library/Perl/5.10.0/darwin-thread-multi-2level /Network/Library/Perl/5.10.0 /Network/Library/Perl /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level /System/Library/Perl/Extras/5.10.0 .) at part1.pl line 5.
BEGIN failed--compilation aborted at part1.pl line 5.
Run Code Online (Sandbox Code Playgroud)
我做一些谷歌搜索,并认为它需要安装.同样在我的谷歌搜索中,我发现使用cpanm的重要建议.所以我首先尝试使用cpan(我已经拥有)安装cpanm.
我得到一个很长的打印输出,基本上说不,不行,"成功的机会有限",并且一遍又一遍地失败.它的全部内容太长了,但我觉得有趣的是:
Warning (usually harmless): 'YAML' not installed, will not store persistent state
Running make test
Can't test without successful make
Running make install
Make had returned bad status, install seems impossible
Could not read '/Users/danielgierl/.cpan/build/ExtUtils-ParseXS-3.15-VSmBrZ/META.yml'. Falling back to …Run Code Online (Sandbox Code Playgroud) 我是perl中win32:ole模块的新手.我试图在命令提示符下逐行打印MS word表数据.但我只能打印表格的最后一行.你能帮我解决这个问题吗?提前致谢.
以下是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions qw( catfile );
use Win32::OLE qw(in);
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;
my $word = get_word();
$word->{DisplayAlerts} = wdAlertsNone;
$word->{Visible} = 1;
my $doc = $word->{Documents}->Open('C:\\PerlScripts\\myTest.docx');
my $tables = $word->ActiveDocument->{'Tables'};
for my $table (in $tables)
{
my $tableText = $table->ConvertToText({ Separator => wdSeparateByTabs });
print "Table: ". $tableText->Text(). "\n";
}
$doc->Close(0);
sub get_word
{
my $word;
eval { $word = Win32::OLE->GetActiveObject('Word.Application');};
die "$@\n" if $@;
unless(defined $word)
{
$word …Run Code Online (Sandbox Code Playgroud) perl脚本包含脚本开头的所有模块名称.
例如:
use strict;
use XML::Parser;
use XML::Simple;
use DBI;
use DBD::DB2::Constants;
use POSIX qw( strftime );
use Storable qw(dclone);
use Data::Dumper;
use Carp;
Run Code Online (Sandbox Code Playgroud)
如何将所有模块名称保存在另一个文件中并将文件包含在主perl脚本中?
谢谢.
我是Perl编程的新手.我刚刚读完了Llama的书.到目前为止,我已经用Bash编写了脚本,但我想尝试使用Perl,它比Bash脚本更有优势.
我正在创建一个使用许多标准模块(例如Getopt)的脚本和一些不那么标准的模块(例如PerlMagick)
在某些时候,我想分发我的Perl代码,我希望它可以被那些不了解Perl或编程的人使用.显然标准模块应该始终存在(我使用"使用5.010"在一定程度上保证这一点),但是哪些非标准模块?
我想有两种可能性:1)我应该告诉最终用户安装缺少的模块吗?2)我应该创建一个测试模块的安装脚本,如果它们不存在,那么安装它们吗?如果选择了选项2,我应该下载模块并安装它们吗?或者用我的主要代码分发它们?我只是不确定这些事情的礼节是什么......
非常感谢你的所有建议,本
我在perl中实现了一个简单的迭代器.我通常使用C#,并且经常使用迭代器和函数式编程.所以我认为在perl中使用一些基础知识会很简单.
问题是,我的性能有些不好,我不希望比for或foreach更快,但我认为有人可以给我一些关于如何加快速度的见解.
这是我的包裹的胆量:
package Iterator;
use strict;
#Constructor for Iterator type
sub new {
my $type = $_[0];
my $this = {};
#set default values
$this->{Array} = @_[1];
$this->{Index} = 0;
$this->{Sub} = sub {
my @array = @{$this->{Array}};
return $#array >= $this->{Index} ? $array[$this->{Index}++] : undef;
};
#return self
bless($this, $type);
return $this;
}
#Iterates next
sub Next {
return $_[0]->{Sub}->();
}
Run Code Online (Sandbox Code Playgroud)
允许您这样做:
my $iterator = Iterator->new(\@array);
while (defined(my $current = $iterator->Next())) {
print $current, …Run Code Online (Sandbox Code Playgroud) 我很难过,我必须问一个简单的问题,但是为了使用GPS :: Babel perl模块,应该在哪里安装gpsbabel?我似乎无法弄清楚适当的路径,并希望有其他工作的人可以提供帮助.在此先感谢您的帮助!
当你运行时perl -e "Bla->new",你会得到这个众所周知的错误:
Can't locate object method "new" via package "Bla"
(perhaps you forgot to load "Bla"?)
Run Code Online (Sandbox Code Playgroud)
由于我的疏忽,前几天发生在Perl服务器进程中.有多个脚本,其中大多数都有适当的use语句.但是有一个脚本,在做Bla->new中sub blub以线123,但缺少一个use Bla在顶部,当它被点击打没有任何使用其他脚本Bla已由服务器进程之前加载,然后砰!
单独测试脚本将是防止这一特定错误的明显方法,但唉,代码依赖于一个巨大的环境.你知道另一种防止这种疏忽的方法吗?
更新
这是一个例子PPI(尽管它的优点)在Perl的观点中有限:
use strict;
use HTTP::Request::Common;
my $req = GET 'http://www.example.com';
$req->headers->push_header( Bla => time );
my $au=Auweia->new;
__END__
PPI::Token::Symbol '$req'
PPI::Token::Operator '->'
PPI::Token::Word 'headers'
PPI::Token::Operator '->'
PPI::Token::Word 'push_header'
PPI::Token::Symbol '$au'
PPI::Token::Operator '='
PPI::Token::Word 'Auweia'
PPI::Token::Operator '->'
PPI::Token::Word 'new'
Run Code Online (Sandbox Code Playgroud)
设置标题并指定Auweia->new解析相同.所以我不确定你如何在这样一个摇摇欲坠的基础上建立起来.我认为问题在于它Auweia也可能是一个子程序; perl.exe …
这是我的问题.我正在运行OS X v10.7(Lion)并且想要设置我编写的旧Perl程序(然后使用带有ActivePerl的Windows系统然后使用其ppm).
我读过使用CPAN来安装Perl模块(我正在尝试安装Graph模块).每当我尝试安装它时,它都会因拒绝连接而失败.为什么?所以我读到我应该运行以下内容来更新CPAN并修复任何损坏的链接:
cpan> install Bundle:CPAN
cpan> reload cpan
cpan> index cpan
cpan> exit
Run Code Online (Sandbox Code Playgroud)
但是,执行此操作后,每次尝试进行CPAN安装或升级时,我都会遇到这种情况:
New CPAN.pm version (v1.9800) available.
[Currently running version is v1.9456]
You might want to try
install CPAN
reload cpan
to both upgrade CPAN.pm and run the new version without leaving
the current session.
Run Code Online (Sandbox Code Playgroud)
我试图使用OS X中包含的默认Perl内容而不是下载ActivePerl.如何修复CPAN并安装图形模块?
PS:运行安装CPAN并重新加载CPAN没有做任何事情,但它生成了相同的消息.
更新 我能够通过终端升级到v1.9800进行手动安装(make,install).但我仍然无法安装图形模块.这是我得到的:
http://cloud.jjnford.com/3D1C1H4217222b1p1O3a
更新 - 问题已解决 我终于能够解决问题了.我刚刚将/User/jj/.cpan目录移动到User/jj/.cpan_bak,然后重新配置了CPAN和安装的Graph Module,没有大惊小怪.
我对Perl很新,需要你的帮助
我有一个xyz.csv包含内容的CSV文件:
这里的level1和er值是字符串名称......不是数字......
level1,er
level2,er2
level3,er3
level4,er4
Run Code Online (Sandbox Code Playgroud)
我使用下面的脚本解析此CSV文件,并在第一次运行时将字段传递给数组
open(my $d, '<', $file) or die "Could not open '$file' $!\n";
while (my $line = <$d>) {
chomp $line;
my @data = split "," , $line;
@XYX = ( [ "$data[0]", "$data[1]" ], );
}
Run Code Online (Sandbox Code Playgroud)
对于第二次运行,我从命令提示符获取输入并存储在变量中$val.我的程序应该从存储在变量中的值解析CSV文件,直到它到达文件末尾
例如
我输入level2所以我需要一个脚本从第二行解析到CSV文件的末尾,忽略文件中的值level2,并将这些值(level2to level4)传递给@XYX = (["$data[1]","$data[1]"],);}
level2,er2
level3,er3
level4,er4
Run Code Online (Sandbox Code Playgroud)
我输入level3所以我需要一个脚本从第三行解析到CSV文件的末尾,忽略文件中之前的值level3,并将这些值(level3和level4)传递给@XYX = (["$data[0]","$data[1]"],);}
level3,er3
level4,er4
Run Code Online (Sandbox Code Playgroud)
我如何实现这一目标?请提出宝贵的建议.我感谢您的帮助
我在perl中遇到了处理内存的奇怪问题.我正在使用一个使用相当大的哈希结构的perl应用程序.我正在为来回对象指定has ref.但最后似乎即使我要释放对象和哈希值,内存使用量也保持不变.
以下是问题的示例:
my $hash = {};
.............
this ds gets populated with a lot of data ...
.......
{
my $obj = new Class("data"=>$hash);
.......
.......
......
}
#even undefing the $hash
undef $hash;
# I can expect some improvement in Memory Utilization, but its not happening
Run Code Online (Sandbox Code Playgroud)
我想我正在做一些非常基本的错误.任何人都可以建议吗?