As CountZero has suggested, the error can be exactly duplicated in the presence of the likely typo:
>perl -wMstrict -le "$_ = qq{chr16\t28797601\t-\t0.777877}; my %site_info; ;; my @arr = split(/\t/,$_,4); $arr[0] = substr($arr[0], 3); $site_info{$arr[0]}{$arr[1]}{'strand'} = $arr[2]; $site_info{$arr[0]{$arr[1]}}{'value'} = $arr[3]; " Can't use string ("16") as a HASH ref while "strict refs" in use at .. +.
And goes away and is replaced by something reasonable with the 'fixed' code:
>perl -wMstrict -le "use Data::Dump qw(dd); ;; $_ = qq{chr16\t28797601\t-\t0.777877}; my %site_info; ;; my @arr = split(/\t/,$_,4); $arr[0] = substr($arr[0], 3); $site_info{$arr[0]}{$arr[1]}{'strand'} = $arr[2]; $site_info{$arr[0]}{$arr[1]}{'value'} = $arr[3]; ;; dd \%site_info; " { 16 => { 28797601 => { strand => "-", value => 0.777877 } } }
Sometimes it's useful to introduce a temoprary 'convenience' variable in place of complex nested expressions:
>perl -wMstrict -le "use Data::Dump qw(dd); ;; $_ = qq{chr16\t28797601\t-\t0.777877}; my %site_info; ;; my @arr = split(/\t/,$_,4); $arr[0] = substr($arr[0], 3); ;; my $current = $site_info{$arr[0]}{$arr[1]} = {}; $current->{'strand'} = $arr[2]; $current->{'value'} = $arr[3]; ;; dd \%site_info; " { 16 => { 28797601 => { strand => "-", value => 0.777877 } } }
Or to use slicing to do multiple, 'simultaneous' assignment:
>perl -wMstrict -le "use Data::Dump qw(dd); ;; $_ = qq{chr16\t28797601\t-\t0.777877}; my %site_info; ;; my @arr = split(/\t/,$_,4); $arr[0] = substr($arr[0], 3); ;; @{ $site_info{$arr[0]}{$arr[1]} }{ qw(strand value) } = @arr[2, 3]; ;; dd \%site_info; " { 16 => { 28797601 => { strand => "-", value => 0.777877 } } }
In reply to Re: Can't use string ("16") as a HASH ref while "strict refs" in use
by AnomalousMonk
in thread Can't use string ("16") as a HASH ref while "strict refs" in use
by thudzj
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |