我不是一个perl程序员——我不太关心为什么会发出警告。我只是想让代码正常工作,我不知道该告诉你什么。显然你应该关心为什么发出警告。知道你在做什么和产生有效的代码之间有联系。@amon:是的,谢谢。我在早前的帖子里把我要写的东西挪动了。已修复。您也应该始终

我不是一个perl程序员——我不太关心为什么会发出警告。我只是想让代码正常工作,我不知道该告诉你什么。显然你应该关心为什么发出警告。知道你在做什么和产生有效的代码之间有联系。@amon:是的,谢谢。我在早前的帖子里把我要写的东西挪动了。已修复。您也应该始终,perl,hash,map,Perl,Hash,Map,我不是一个perl程序员——我不太关心为什么会发出警告。我只是想让代码正常工作,我不知道该告诉你什么。显然你应该关心为什么发出警告。知道你在做什么和产生有效的代码之间有联系。@amon:是的,谢谢。我在早前的帖子里把我要写的东西挪动了。已修复。您也应该始终使用严格的。如果你在问题上需要帮助但拒绝使用,你不会得到别人的同情。“这些不需要任何人维护”,直到您的代码无法运行并且需要寻求帮助,例如堆栈溢出。要使使用strict工作,通常您只需要声明变量,例如my$foo。使用警告和严格警告有一个很短的学


我不是一个perl程序员——我不太关心为什么会发出警告。我只是想让代码正常工作,我不知道该告诉你什么。显然你应该关心为什么发出警告。知道你在做什么和产生有效的代码之间有联系。@amon:是的,谢谢。我在早前的帖子里把我要写的东西挪动了。已修复。您也应该始终
使用严格的
。如果你在问题上需要帮助但拒绝使用,你不会得到别人的同情。“这些不需要任何人维护”,直到您的代码无法运行并且需要寻求帮助,例如堆栈溢出。要使
使用strict
工作,通常您只需要声明变量,例如
my$foo
。使用警告和严格警告有一个很短的学习曲线,从长远来看,它们最终会比你学习如何使用它们节省更多的时间。
$COLUMN = 6;

%PERIOD_1 = (map {(  1, 10, 14, 20, 22, 29, 35, 39 )[$_] => 1 } 0..100); #1st period
%PERIOD_2 = (map {(  3, 8, 11, 18, 24, 26, 32, 37  )[$_] => 2 } 0..100); #2nd period
%PERIOD_3 = (map {(  7, 13, 16, 21, 28, 34, 36     )[$_] => 3 } 0..100); #3rd period
%PERIOD_4 = (map {(  5, 2, 6, 15, 17, 23, 27, 31,38)[$_] => 4 } 0..100); #4th period
%PERIOD_5 = (map {(  4, 9, 12, 19, 25, 30, 33, 40  )[$_] => 5 } 0..100); #5th period

%PERIODS = (%PERIOD_1,%PERIOD_2,%PERIOD_3,%PERIOD_4,%PERIOD_5);

open (FILE,"<",$ARGV[0]);

while(<FILE>) {
   my @columns = split(/\t/);
   print $columns[$COLUMN] . "-" . $PERIODS{$columns[$COLUMN]};
} 

close(FILE);
37-2
29-1
15-4
6-4
34-3
24-2
5-
%PERIOD_2 = (map {(  3, 8, 11, 18, 24, 26, 32, 37  )[$_] => 2 } 0..100);
my %hash = map { $_ => 2 } (  3, 8, 11, 18, 24, 26, 32, 37 );
my %hash;
for my $num (1, 10, 14, 20, 22, 29, 35, 39) {
    $hash{$num} = 1;
}
for my $num (3, 8, 11, 18, 24, 26, 32, 37) {
    $hash{$num} = 2;
}
....
use strict;
use warnings;
use Data::Dumper;
print Dumper \%hash;   # send ref to hashes and arrays
Odd number of elements in hash assignment at foo.pl line 9.
$VAR1 = {
          '32' => 2,
          '11' => 2,
          '3' => 2,
          '26' => 2,
          '2' => undef,
          '8' => 2,
          '18' => 2,
          '24' => 2,
          '37' => 2
        };
%hash1 = (5 => 2);
%hash2 = (5 => undef);
%hash  = (%hash1, %hash2);
my %foo = (1, 2, 3);  # odd number of elements
use strict;
use warnings;
open my $file, '<', $ARGV[0] or die "Unable to open input file: $!";
my %period = (map {(  1, 10, 14, 20, 22, 29, 35, 39 )[$_] => 1 } 0..100);
 1 => 1,
10 => 1,
14 => 1,
20 => 1,
22 => 1,
29 => 1,
35 => 1,
39 => 1,
1,
1,
1,
1,
1,
use strict;
use warnings;

my $column = 6;

my %periods;
while (<DATA>) {
  my ($val, @keys) = /\d+/g;
  next unless $val;
  $periods{$_} = $val for @keys;
}

open my $fh, "<", $ARGV[0];

while(<$fh>) {
  my @columns = split /\t/;
  my $key = $columns[$column];
  printf "%s - %s\n", $key, $periods{$key};
} 

__DATA__
1:  1, 10, 14, 20, 22, 29, 35, 39;
2:  3,  8, 11, 18, 24, 26, 32, 37;
3:  7, 13, 16, 21, 28, 34, 36;
4:  5,  2,  6, 15, 17, 23, 27, 31, 38;
5:  4,  9, 12, 19, 25, 30, 33, 40;