Perl:将哈希引用保存在Image::ExifTool的哈希中
尝试用两天时间将ExifTool的所有可读(非二进制)输出保存到哈希中,并将文件路径作为密钥:Perl:将哈希引用保存在Image::ExifTool的哈希中,perl,hash,Perl,Hash,尝试用两天时间将ExifTool的所有可读(非二进制)输出保存到哈希中,并将文件路径作为密钥: use strict; use warnings; use Image::ExifTool; use Data::Types qw(:all); use v5.28; my @directories = ("/some/filepath/to-pictures"); my @suffixes = qw(jpg jpeg gif png raw svg tif tiff psd orf nef eps
use strict;
use warnings;
use Image::ExifTool;
use Data::Types qw(:all);
use v5.28;
my @directories = ("/some/filepath/to-pictures");
my @suffixes = qw(jpg jpeg gif png raw svg tif tiff psd orf nef eps cr2 arw);
my %file_catalog = ();
while (my $folder = shift @directories) {
opendir(DirHandle, "$folder") or die "Cannot open $folder\n";
my @files = readdir(DirHandle);
closedir(DirHandle);
foreach my $file (@files) {
my $file_string = "$folder/$file";
if (-f $file_string) {
my $sep_pos = rindex($file, ".");
my $end_chars = -($sep_pos - (length $file) + 1);
my $suffix = substr $file, $sep_pos + 1, $end_chars;
if (grep ( lc $suffix, @suffixes)) {
my $exif_tool = new Image::ExifTool;
my $info = $exif_tool->ImageInfo($file_string);
say "Datei: $file_string";
%file_catalog = ($file_string => $info);
foreach (keys %{$info}) {
say "Key: $_ => Value: $$info{ $_ }";
}
}
}
}
}
也不工作:%file\u catalog=($file\u string=>%{$info})代码>
但是我要么我在我的%文件目录中没有得到超过一张图片的信息
-你能给我解释一下吗
或者,正如您在my的提交历史记录中所看到的,我在取消引用(“不能使用字符串作为哈希引用,而使用“严格引用”
)或存储(“哈希分配中的奇数元素”
)方面遇到了很多问题
当然,并非所有图像都具有相同的exif信息,每个图像都提供不同的键->值
对于测试输出:
my $hash_size = keys %file_catalog;
print "\n---------------------------\n";
print "In 'file_catalog'-hash recorded image-path (key)-/ exif-data (value)-hashes: ", $hash_size;
print "\n---------------------------\n";
my ($i, $j) = 0;
foreach my $key (sort keys %file_catalog) {
$i++;
printf "%s. key: $key\n", uc chr($i + ord('A') - 1 );
foreach my $inner_key (keys %{$file_catalog{ $key }}) {
$j++;
say "$j. inner key: $inner_key: $file_catalog{$key}{$inner_key}";
}
}
也许有人能帮我理解。此外,可能还有比我的新手代码更好的构造。要将新键值添加到所需的哈希中,请执行以下操作:
$file_catalog{$file_string} = $info;