package CCD::Human; use strict; use warnings; sub new { my ($class, $in_filename, $out_filename) = @_; my %self = ( in => $in_filename, out => $out_filename, ); return bless \%self, $class; } sub parse { my ($self) = @_; open(my $in, '<', $self->{in}) or die "Cannot open file '$self->{in}' for reading: $!"; open(my $out, '>', $self->{out}) or die "Cannot open file '$self->{out}' for writing: $!"; while (<$in>) { chomp; my @fields = split /\t/; print $out "$fields[0] $fields[2] $fields[6] $fields[5]\n" if ($fields[0] =~ /16/ && $fields[6] eq '-' && $fields[5] =~ /Public/); } close $in or die "Cannot close file '$self->{in}': $!"; close $out or die "Cannot close file '$self->{out}': $!"; } #### use CCD::Human; ... my $human = CCD::Human->new ( '/home/ki/Downloads/currenthumanccds.txt', '/home/ki/output.txt', ); ... $human->parse();