我正在试图弄清楚如何从perl中的java jar文件中读取META-INF / MANIFEST.MF文件。我正在尝试使用Mail::Header来分隔清单中的属性。如果已经从jar中提取了清单文件,这可以正常工作,但我正在试图找出如何将清单提取到内存中然后立即放入Header对象。这就是我到目前为止所做的:
my $jarFile = "MyJar.jar";
my &jar = Archive::Zip->new($jarFile);
my $manifest = Archive::Zip::MemberRead->new($jar, "META-INF/MANIFEST.MF");
my $header = Mail::Header->new;
$header->read(????);
print $header->get("Class-Path");
我无法弄清楚使用哪个构造函数和/或哪个提取/读取函数来读取$ manifest文件句柄。 (我是perl的新手)
答案 0 :(得分:1)
MemberRead
有一个非常愚蠢的API。它应该以兼容的方式提供真实句柄,或者至少模仿IO::File
(因此我们将其传递给Mail::Header
构造函数或者至少能够调用{{ 3}}),但不是。
我们可以通过将文件内容临时存储在数组中来解决其不兼容问题。
my @lines;
{
my $handle = Archive::Zip->new($jar_file)->memberNamed('META-INF/MANIFEST.MF')->readFileHandle;
while (defined(my $line = $handle->getline)) { # even $_ doesn't work!! what a piece of camel dung
push @lines, $line;
}
}
my $headers = Mail::Header->new([@lines]);
print $headers->get('Class-Path');