同等のハッシュを作成するつもりですか? または、本当に文字列形式が必要ですか? このプログラムはText::CSV
、ファイルからハッシュを構築するために使用し、それを使用してダンプしData::Dump
ます。これにより、文字列形式も得られます。
use strict;
use warnings;
use Text::CSV;
use Data::Dump 'dump';
my $csv = Text::CSV->new({ sep_char => ':' });
open my $fh, '<', 'amino.txt' or die $!;
my %amino_acids;
while (my $data= $csv->getline($fh)) {
$amino_acids{$data->[2]} = [
$data->[0],
$data->[1],
[ $data->[4] =~ /[A-Z]+/g ]
];
}
print '$amino_acids = ', dump \%amino_acids;
出力
$amino_acids = {
F => ["Phenylalanine", "Phe", ["TTT", "TTC"]],
M => ["Methionine", "Met", ["ATG"]],
P => ["Proline", "Pro", ["CCT", "CCC", "CCA", "CCG"]],
}
アップデート
本当にモジュールをインストールしたくない場合(これは非常に簡単なプロセスであり、コードがより簡潔で信頼できるものになります)、これは必要なことを行います。
use strict;
use warnings;
open my $fh, '<', 'amino.txt' or die $!;
print "my %amino_acids = (\n";
while (<$fh>) {
chomp;
my @data = /[^:"]+/g;
my @codons = $data[4] =~ /[A-Z]+/g;
printf qq{ %s => ["%s", "%s", [%s]],\n},
@data[2,0,1],
join ', ', map qq{"$_"}, @codons;
}
print ")\n";
出力
my %amino_acids = (
M => ["Methionine", "Met", ["ATG"]],
F => ["Phenylalanine", "Phe", ["TTT", "TTC"]],
P => ["Proline", "Pro", ["CCT", "CCC", "CCA", "CCG"]],
)