2

このコードを使用してサブルーチンまたは関数を作成する方法を教えてもらえますか? 基本的に、スクリプトを長くしすぎずに再利用できるように、コードをサブルーチンにしたいと考えています。

これが私のスクリプトです:

#!/usr/local/bin/perl

use strict;
use warnings;
use Data::Dumper;
use Carp qw(croak);

my @fields;
my ($tmp_var, $rec_type, $country, $header, $Combline, $records, $line);
my $filename = 'data5.txt';

open (my $input_fh, '<', $filename ) or croak "Can't open $filename: $!";
open  my $OUTPUTA, ">", 'drp1.txt' or die $!;
open  my $OUTPUTB, ">", 'drp2.txt' or die $!;
while (<$input_fh>) {
    $line = _trim($_);  
    @fields = split (/\|/, $line);  
    $rec_type = $fields[0];
    $country = $fields[1];
    my $string = substr $fields[1], 0, 1;
    $header = $line if(/^INVHDR/);  

    if ($rec_type eq 'INVDET') {                                     
        if ($string eq 'I')  {           
            $records = $header . $line;                 
            print  $OUTPUTA $records, scalar <$input_fh>;               
        }
        else {           
            $records = $header . $line;
            print  $OUTPUTB $records, scalar <$input_fh>;
        }      
    }     
}   

close $OUTPUTA or die $!;
close $OUTPUTB or die $!;

sub _trim {
    my $word = shift;
    if ( $word ) {      
        $word =~ s/\s*\|/\|/g;      #remove trailing spaces
        $word =~ s/"//g;            #remove double quotes
    }
    return $word;
}

これは、サブルーチンまたは関数に入れたかったスクリプトの一部です。

$line = _trim($_);  
@fields = split (/\|/, $line);  
$rec_type = $fields[0];
$country = $fields[1];
my $string = substr $fields[1], 0, 1;
$header = $line if (/^INVHDR/);

if ($rec_type eq 'INVDET') {                                     
    if ($string eq 'I')  {           
        $records = $header . $line;                 
        print $OUTPUTA $records, scalar <$input_fh>;                
    }
    else {
        $records = $header . $line;
        print $OUTPUTB $records, scalar <$input_fh>;
    }
}     
4

1 に答える 1