Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^3: creating a class with encapsulation ?

by Athanasius (Archbishop)
on Apr 27, 2016 at 04:41 UTC ( [id://1161610]=note: print w/replies, xml ) Need Help??


in reply to Re^2: creating a class with encapsulation ?
in thread creating a class with encapsulation ?

Here is the standard approach:

(1) In file X/CCD/Human.pm (where X is some directory listed in @INC):

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}': $!"; }

(2) Client code would use this class as follows:

use CCD::Human; ... my $human = CCD::Human->new ( '/home/ki/Downloads/currenthumanccds.txt', '/home/ki/output.txt', ); ... $human->parse();

Disclaimers:

  1. The above compiles but is otherwise untested.
  2. This doesn’t look like a use-case for which a class is either required or appropriate. Simply putting your code into a subroutine within a module would likely be a better approach.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^4: creating a class with encapsulation ?
by Anonymous Monk on Apr 29, 2016 at 01:27 UTC
    im having trouble running it i tried your client code as a test file nothing happened. no output file was created. and yes i set the class as .pm

      It works correctly for me. A few things to check:

      • Does your module file CCD/Human.pm begin and end like this?

        package CCD::Human; ... 1; # return a true value
      • Does your client code use CCD::Human;?

      • Are the data items on each line of .../home/ki/Downloads/currenthumanccds.txt separated by tab characters?

      • Is the file .../home/ki/output.txt created when you run the script? What does it contain?

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

      it isn't supposed to produce any output, also its incomplete, you have to finish it

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1161610]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (8)
As of 2024-04-23 12:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found