Perl遍历URL列表下载文件无效果,直接传参正常,求排查
问题:Perl脚本读取URL列表后无法下载文件,直接传URL却正常
我有一批需要下载的JSON文件,把它们的URL存在了URL_FILE_LIST.txt里,文件内容如下:
https://www.fema.gov/api/open/v1/DeclarationDenials.json https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries.json
我写的Perl脚本是这样的:
#!/usr/bin/perl use strict; use warnings; use File::Basename; use LWP::Simple; my $file = 'URL_FILE_LIST.txt'; open my $info, $file or die "Could not open $file: $!"; while( my $line = <$info>) { getstore($line , basename($line)); last if $. == 2; } close $info;
现在遇到的问题是:打印getstore的参数时,URL和文件名看起来都没问题,但执行脚本后完全没下载效果;但如果去掉循环,直接把URL作为参数传入getstore,就能正常下载。请问哪里出错了?
解决方法
问题出在每行末尾的换行符上。从文件读取的$line变量默认会包含行尾的换行符(\n),虽然你打印的时候可能因为换行符被输出换行而看不到,但实际传递给getstore的URL和文件名都多了这个换行符——带换行的URL是无效的,自然请求失败。
修改脚本,在读取每行后加上chomp命令去掉换行符即可:
#!/usr/bin/perl use strict; use warnings; use File::Basename; use LWP::Simple; my $file = 'URL_FILE_LIST.txt'; open my $info, $file or die "Could not open $file: $!"; while( my $line = <$info>) { chomp $line; # 移除行尾的换行符 getstore($line , basename($line)); last if $. == 2; } close $info;
额外提示:如果你的文本文件是Windows格式(行尾是\r\n),可以用s/\s+$//代替chomp,去掉所有行尾的空白字符(包括回车和换行),兼容性更好。
内容的提问来源于stack exchange,提问作者cJAY
相关产品推荐
相关产品推荐

