http://qs321.pair.com?node_id=11103676


in reply to How to Map a scalar to a key that is an array?

This could be entered into a hash fairly simply. First set the filehandle to read in paragraph mode, (local $/ = ''), within a limited scope (determined by the enclosing braces, {  }). Then a simple split /\n/ will capture the key and the values in an array.

EDIT: added for loop that removes quotes from beginning and end of items in @data

Usage: perl my_program.pl input_file

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %data; { local $/ = ''; while (<>) { my ($key, @data) = split /\n/; for (@data) { s/^"//; s/"$//; } $data{$key} = \@data; } } $Data::Dumper::Indent=1; print Dumper \%data;
Prints:
$VAR1 = { 'arn:aws:iam::12345678901:role/Role2-Role2' => [ 'Alexa for Business', 'AWS Certificate Manager', 'AWS Certificate Manager Private Certificate Authority', 'AWS Amplify', 'Manage - Amazon API Gateway', 'Application Auto Scaling', 'AWS App Mesh', 'Amazon AppStream 2.0', 'AWS AppSync' ], 'arn:aws:iam::11111111111:role/ADFS-MyRoleName' => [ 'Alexa for Business', 'AWS Certificate Manager', 'AWS Certificate Manager Private Certificate Authority', 'AWS Amplify', 'Manage - Amazon API Gateway', 'AWS App Mesh', 'Amazon AppStream 2.0', 'AWS AppSync', 'Amazon Athena', 'AWS Auto Scaling' ] };
(The output is a little messy due to the long key names.)

EDIT: Used Indent to Data::Dumper to clean up output from Dumper as noted by jdporter