$ ./6.MY.translate.pl --configfile C --from tja --infile /home/bob/Documents/meditations/Algorithm-Markov-Multiorder-Learner-master/data/2.short.shelley.txt --outfile /home/bob/Desktop/1.state
input is “The ancient teachers of this science,” said he,
“promised impossibilities and performed nothing. The modern masters
...
unfold to the world the deepest mysteries of creation.
----------------
begin block to change
property is TO
type is zilch
expected type is zilch
did execution get here?
property is key
type is zilch
expected type is zilch
did execution get here?
property is FROM
type is zilch
expected type is zilch
did execution get here?
after block to change, self is
bless({ format => 5.23, FROM => "en", key => 321, START => 1562878454, TO => "ru" }, "My::Module")
in new, param_hr is
{
CONTENT => "\x{201C}The ancient teachers of this science,\x{201D} said he,\n\x{201C}promised impossibilities and performed nothing. The modern masters\npromise very little; they know that metals
...
the steps\nalready marked, I will pioneer a new way, explore unknown powers, and\nunfold to the world the deepest mysteries of creation.\n\n",
FROM => "tja",
key => 123,
TO => undef,
}
in new, self is
bless({ format => 5.23, FROM => "en", key => 321, START => 1562878454, TO => "ru" }, "My::Module")
in sub key
akey is 123
you called key() method on object 'My::Module=HASH(0x56161e3a1cb0)'
key() : changing key to '123'
in sub key
Use of uninitialized value $akey in concatenation (.) or string at ./6.MY.translate.pl line 62.
akey is
you called key() method on object 'My::Module=HASH(0x56161e3a1cb0)'
my key: 123
--- mod is
bless({ format => 5.23, FROM => "en", key => 123, START => 1562878454, TO => "ru" }, "My::Module")
$
####
#!/usr/bin/perl -w
use 5.011;
binmode STDOUT, ":utf8";
use open IN => ':crlf';
use open OUT => ':utf8';
package My::Module;
sub new {
my ( $class, $param_hr ) = @_;
$param_hr = {} unless defined $param_hr;
my %self = (
key => 321,
format => 5.23,
START => time(),
'FROM' => 'en',
'TO' => 'ru',
);
say "begin block to change";
use Carp;
my $self = \%self;
for my $property ( keys %self ) {
if ( exists $param_hr->{$property} ) {
say "property is $property";
my $type = ref $param_hr->{$property} || 'zilch';
say "type is $type";
my $expected_type = ref $self{$property} || 'zilch';
say "expected type is $expected_type";
croak "$property should be a $expected_type"
if $expected_type ne $type;
say "did execution get here?";
#$self{$property} = delete $param_hr->{$property};
}
}
say "after block to change, self is";
bless $self, $class;
dd $self;
if ( exists $param_hr->{'key'} ) {
say "in new, param_hr is";
use Data::Dump;
dd $param_hr;
say "in new, self is ";
dd $self;
}
if ( exists $param_hr->{'key'} ) { $self->key( $param_hr->{'key'} ) }
else { warn "param 'key' is required."; return undef }
return $self; # return hash, now blessed into a class instance, hallelujah
}
# get or set the key
sub key {
say "in sub key";
my $self = $_[0];
my $akey = $_[1]; # optional key
say "akey is $akey ";
print "you called key() method on object '$self'\n";
if ( defined $akey ) {
print "key() : changing key to '$akey'\n";
$self->{'key'} = $akey;
}
return $self->{'key'};
}
1;
package main;
use Getopt::Long;
my $outfile = undef;
my $configfile = undef;
my $infile = undef;
my $from = undef;
my $to = undef;
if (
!Getopt::Long::GetOptions(
"outfile=s",
\$outfile,
"infile=s",
\$infile,
"configfile=s",
\$configfile,
"from=s",
\$from,
"to=s",
\$to,
"help",
sub {
print "Usage : $0 --configfile C [--outfile O] [--infile I] [--help]\n";
exit 0;
},
)
)
{
die "error, commandline";
}
die "configfile is needed (via --configfile)" unless defined $configfile;
my $inFH;
if ( defined($infile) ) {
open( $inFH, '<:crlf:encoding(UTF-8)', $infile )
or die "opening input file $infile, $!";
}
my $instr;
{ local $/ = undef; $instr = <$inFH> }
close $inFH;
if ( defined($instr) ) {
say "input is $instr";
}
say "----------------";
# uncomment only if My::Module is in separate file:
#use My::Module;
my $mod = My::Module->new(
{
'key' => 123,
'CONTENT' => $instr,
'FROM' => $from,
'TO' => $to,
}
);
die unless defined $mod;
print "my key: " . $mod->key() . "\n";
say "--- mod is";
dd $mod;
__END__
####
----------------
begin block to change
property is TO
type is zilch
expected type is zilch
did execution get here?
property is key
type is zilch
expected type is zilch
did execution get here?
property is FROM
type is zilch
expected type is zilch
did execution get here?
after block to change, self is
bless({ format => 5.23, FROM => "tja", key => 123, START => 1562881061, TO => undef }, "My::Module")
param 'key' is required. at ./6.MY.translate.pl line 53.
Died at ./6.MY.translate.pl line 133.
$
####
SCALAR
ARRAY
HASH
CODE
REF
GLOB
LVALUE
FORMAT
IO
VSTRING
Regexp
####
say "begin block to change";
use Carp;
my $self = \%self;
for my $property ( keys %self ) {
if ( exists $param_hr->{$property} ) {
say "property is $property";
my $type = ref $param_hr->{$property} || 'zilch';
say "type is $type";
my $expected_type = ref $self{$property} || 'zilch';
say "expected type is $expected_type";
croak "$property should be a $expected_type"
if $expected_type ne $type;
say "did execution get here?";
$self{$property} = delete $param_hr->{$property};
}
}
say "after block to change, self is";