私の正規表現は本来あるべきほど良くありません。あらかじめお詫び申し上げます。
コード:
#!/usr/bin/perl -wT
use strict;
use warnings;
use Text::ParseWords;
my @AoH;
my $filename = 'metadata.txt';
open(my $fh, '<', $filename) or die "Could not open file '$filename' $!";
while (<$fh>) {
my $rec = {};
for my $field ( split ) {
(my $key, my $value) = quotewords('=', 0, $field);
$rec->{$key} = $value;
print "$key -> $value;\n";
}
push @AoH, $rec;
}
次の文字列を解析したい (metadata.txt にあります):
video_info="これは動画の説明です" video_name="avideoname.mp4" video_thumb="avideothumbnail.jpg"
基本的に、前述の文字列を分割して、引用符で囲まれているものはすべて値 (空白を含む) であり、= の前にあるものはすべてキーになるようにします。
私の望む出力:
video_info -> This is a video description;
video_name -> avidenoname.mp4;
video_thumb -> avideothumbnail.jpg;
これを参照として使用して、ハッシュの配列を作成しています: http://docstore.mik.ua/orelly/perl/prog3/ch09_03.htm、コードにわずかな変更を加えて (たとえば、分割の代わりに引用語を使用) . これは主に正規表現の問題だと思いますが、問題や非推奨のコードが使用されている場合は、矛盾を修正/説明してください。
どんな助けでも大歓迎です。前もって感謝します。