如何在Perl中将空格转换为下划线?

Mic*_*ela 1 perl

我正在编写一个代码来创建以数组中的一列命名的文件,然后在其中包含另一列的所有常用值.我已成功完成此操作,但现在我想消除文件名之间的空白区域并将其转换为下划线.我怎么做?

#!/usr/local/bin/perl

use strict;

my @traitarray;
my $traitarray;
my $input ;
my %traithash ;
my $t_out ;
my $TRAIT;
my $SNPS;

open ($input, "gwas_catalog_v1.0-downloaded_2015-07-08") || die () ;

while(<$input>) {
    @traitarray = split (/\t/);
    $TRAIT = $traitarray[7];
    $SNPS = $traitarray[21];

        if (!exists $traithash {$TRAIT}) {
                open ($t_out, ">outputFiles/".$TRAIT.".txt");
                print ($t_out "$SNPS\n"); 
                $traithash {$TRAIT} = 1 ;
                push (@traitarray, $TRAIT) ;
        }
        else {
            print $t_out "$SNPS\n";
            }
}

foreach ($traitarray) {
    close "$TRAIT.txt";

}
Run Code Online (Sandbox Code Playgroud)

我曾尝试寻找答案,但许多问题要么包含其他内容,要么在bash终端中如何解决这个问题,我还不熟悉,因为我还是新编码.

该文件是10947980行,有33列.

Bor*_*din 5

你可能在谈论你用这个打开的文件

open ($t_out, ">outputFiles/".$TRAIT.".txt")
Run Code Online (Sandbox Code Playgroud)

您可以先使用音译操作符进行操作,tr/ /_/然后您的open调用将更好地编写

my $outfile = "outputFiles/$TRAIT.txt";
$outfile =~ tr/ /_/;
open my $t_out, '>', $outfile or die qq{Unable to open "$outfile" for output: $!};
Run Code Online (Sandbox Code Playgroud)

  • 听起来他们甚至想要`tr// _/s` (2认同)