- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 Perl 语言编程的新手。我从 CPan 官方网站 ( https://metacpan.org/pod/Net::FTP::RetrHandle ) 剪切并粘贴了一个简短示例,它在 Zip 文件中列出了成员名称,而无需下载整个文件。请注意,我将第一行从“#!/usr/bin/perl”更改为“#!/root/localperl/bin/perl”,因为我想使用最新的 Perl 版本 5.18.2。
#!/root/localperl/bin/perl
use warnings;
use strict;
use Net::FTP;
use Net::FTP::AutoReconnect;
use Net::FTP::RetrHandle;
use Archive::Zip;
my $ftp = Net::FTP::AutoReconnect->new("ftp.info-zip.com", Debug => $ENV{DEBUG})
or die "connect error\n";
$ftp->login('anonymous','example@example.com')
or die "login error\n";
$ftp->cwd('/pub/infozip/unix/linux')
or die "cwd error\n";
my $fh = Net::FTP::RetrHandle->new($ftp,'unz551x-glibc.zip')
or die "Couldn't get handle to remote file\n";
my $zip = Archive::Zip->new($fh)
or die "Couldn't create Zip object\n";
foreach my $fn ($zip->memberNames())
{
print "unz551-glibc.zip: $fn\n";
}
我 gedit “.bash_profile”,并添加以下环境变量供 Perl 特定版本使用:
PERL_BIN=$HOME/localperl/bin
PERL_LIB=$HOME/localperl/lib/5.18.2
export PATH=$PERL_BIN:$PERL_LIB:$PATH
[root@cspp ~]# echo $PATH
/root/localperl/bin:/root/localperl/lib/5.18.2:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/本地/bin:/usr/bin:/bin:/root/bin:/root/bin
我们可以通过运行以下命令来检查事件的 Perl 版本:
[root@cspp ~]# perl -v
这是为 x86_64-linux 构建的 perl 5,版本 18,subversion 2 (v5.18.2)
版权所有 1987-2013,拉里沃尔
Perl 只能在艺术许可证或GNU 通用公共(public)许可证,可以在 Perl 5 源代码包中找到。
Perl 的完整文档,包括 FAQ 列表,可以在该系统使用“man perl”或“perldoc perl”。如果您有权访问互联网,将您的浏览器指向http://www.perl.org/ , Perl 主页。
当我执行上述代码片段时,它抛出以下错误:
[root@cspp ~]# perl zipdown.pl
IO error: read failed : at /root/localperl/lib/5.18.2/Archive/Zip/Archive.pm line 705. Archive::Zip::Archive::_findEndOfCentralDirectory('Archive::Zip::Archive=HASH(0x1d55618)', 'Net::FTP::RetrHandle=HASH(0x1d55528)') called at /root/localperl/lib/5.18.2/Archive/Zip/Archive.pm line 607 Archive::Zip::Archive::readFromFileHandle('Archive::Zip::Archive=HASH(0x1d55618)', 'Net::FTP::RetrHandle=HASH(0x1d55528)', 'Net::FTP::RetrHandle=HASH(0x1d55528)') called at /root/localperl/lib/5.18.2/Archive/Zip/Archive.pm line 574 Archive::Zip::Archive::read('Archive::Zip::Archive=HASH(0x1d55618)', 'Net::FTP::RetrHandle=HASH(0x1d55528)') called at /root/localperl/lib/5.18.2/Archive/Zip/Archive.pm line 59 Archive::Zip::Archive::new('Archive::Zip::Archive', 'Net::FTP::RetrHandle=HASH(0x1d55528)') called at /root/localperl/lib/5.18.2/Archive/Zip.pm line 284 Archive::Zip::new('Archive::Zip', 'Net::FTP::RetrHandle=HASH(0x1d55528)') called at zipdown.pl line 19 Couldn't create Zip object
错误“Couldn't create Zip object”出现在第19行。我认为这种错误不应该是由简单的官方源代码本身引起的。所以我提供了一些相关的路径和文件供大家引用:
/root/localperl/lib/5.18.2/Archive/(Extract.pm, Tar.pm, Zip.pm) /root/localperl/lib/5.18.2/Archive/Tar/(Constant.pm, File.pm) /root/localperl/lib/5.18.2/Archive/Zip/(Archive.pm, BufferedFileHandle.pm, DirectoryMember.pm, FAQ.pod, FileMember.pm, Member.pm, MemberRead.pm, MockFileHandle.pm, NewFileMember.pm, StringMember.pm, Tree.pm, ZipFileMember.pm)
/root/localperl/lib/5.18.2/Net/(Cmd.pm, Config.pm, Domain.pm, FTP.pm, hostent.pm, libnetFAQ.pod, netent.pm, Netrc.pm, NNTP.pm, Ping.pm, POP3.pm, protoent.pm, servent.pm, SMTP.pm, Time.pm) /root/localperl/lib/5.18.2/Net/FTP/(A.pm, AutoReconnect.pm, dataconn.pm, E.pm, I.pm, L.pm, RetrHandle.pm)
值得一提的是,默认情况下 Perl 安装程序无法安装 Zip 模块。因此,我使用“cpan”环境独立安装如下:
root# cpan
cpan> install Archive::Zip
cpan> quit
root#
此外,为了使用 Net::FTP::AutoReconnect 和 Net::FTP::RetrHandle 模块,我下载了 perl-Net-FTP-AutoReconnect-0.3-3.el6.noarch.rpm 和 perl-Net -FTP-RetrHandle-0.2-3.el6.noarch.rpm 来自http://pkgs.org/centos-6/epel-i386/perl-Net-FTP-AutoReconnect-0.3-3.el6.noarch.rpm.html和 http://pkgs.org/centos-6/epel-i386/perl-Net-FTP-RetrHandle-0.2-3.el6.noarch.rpm.html分别链接,一一安装:
rpm -ivh perl-Net-FTP-AutoReconnect-0.3-3.el6.noarch.rpm
rpm -ivh perl-Net-FTP-RetrHandle-0.2-3.el6.noarch.rpm
我花了一整天的时间尝试所有可能的解决方案,尽我所能。我现在无事可做,只能向来自 SO 的 Perl 专家寻求帮助。非常感谢您!
最佳答案
首先,在弄清楚如何设置 perl + 库的本地副本方面做得很好。然而最好不要用 perl 来学习。
其次,虽然 CPAN 是“官方的”,但您在其上找到的软件包是由很多人编写的,而且代码质量参差不齐。 Net::FTP::RetrHandle 的版本为 0.2,日期为 2006 年。这并不意味着它是糟糕的代码,只是它没有被广泛使用。
我试过这个例子,但它和你一样失败了。
然后我在末尾注释掉了Archive::Zip 代码,只使用文件句柄从FTP 服务器读取数据并将其保存到文件中。该文件似乎是一个有效的 ZIP 存档,因此我们知道基本情况很好。
然后我尝试给 Archive::Zip 代码一个普通的文件句柄来处理。那很好。
所以 - 这是两者之间的某种相互作用。查看 Archive::Zip 源代码,在从文件末尾向后搜索后尝试读取时发生错误。所以 - 我查看了 Net::FTP::RetrHandle 模块中的搜索子例程。我注意到您可以设置一个调试环境变量,我也这样做了。
export DEBUG=1
perl ftp_fh_test.pl
...
Net::FTP=GLOB(0x2e99ce8)<<< 250 Connected to /dsa0/infozip/pub/infozip/unix/linux.
Net::FTP=GLOB(0x2e99ce8)>>> PORT 192,168,1,43,226,125
Net::FTP=GLOB(0x2e99ce8)<<< 200 Port 226.125 at Host 80.229.41.160 accepted.
Net::FTP=GLOB(0x2e99ce8)>>> REST 155293
Net::FTP=GLOB(0x2e99ce8)<<< 500 I never heard of the REST command. Try HELP.
IO error: read failed...
因此 - FTP 服务器无法识别“REST”命令,因此您无法通过该服务器进行搜索。尝试不同的 FTP 服务器。
您可能还喜欢perlbrew和 local::lib作为开发设置的一部分。对于设置本地 perl 环境非常有用。
关于linux - Archive::Zip 无法在 Perl 中创建 Zip 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21907769/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!