—package
Acme::Replica;
our
$VERSION
=
'0.02'
;
require
Exporter;
use
Carp;
our
@EXPORT
=
qw/replica_of/
;
sub
replica_of {
my
$sample
=
shift
;
my
$r
=
ref
(
$sample
);
return
$r
eq
'HASH'
? Acme::Replica::_mode_hash_ref(
$sample
) :
$r
eq
'ARRAY'
? Acme::Replica::_mode_array_ref(
$sample
) :
$r
eq
'SCALAR'
? Acme::Replica::_mode_scalar_ref(
$sample
) :
!
$r
? Acme::Replica::_mode_scalar(
$sample
) :
croak
'Not a (SCALAR|ARRAY|HASH) reference.'
;
}
sub
_mode_hash_ref {
my
(
$hash_ref
,) =
@_
;
my
%replica_hash
= ();
for
(
keys
%$hash_ref
) {
$replica_hash
{ Acme::Replica::_add_invisible_character(
$_
) } =
$hash_ref
->{
$_
};
}
return
%replica_hash
;
}
sub
_mode_array_ref {
my
(
$array_ref
,) =
@_
;
my
@replica_array
= ();
for
(
@$array_ref
) {
push
@replica_array
, Acme::Replica::_add_invisible_character(
$_
);
}
return
@replica_array
;
}
sub
_mode_scalar_ref {
my
(
$scalar_ref
,) =
@_
;
return
Acme::Replica::_add_invisible_character(
$$scalar_ref
);
}
sub
_mode_scalar {
my
(
$scalar
,) =
@_
;
return
Acme::Replica::_add_invisible_character(
$scalar
);
}
sub
_add_invisible_character {
my
(
$str
,) =
@_
;
return
pack
(
'H2'
,
'1c'
) .
$str
;
}
1;
__END__
=encoding utf8
=head1 NAME
Acme::Replica
=head1 SYNOPSIS
use strict;
use warnings;
use Acme::Replica;
use Data::Dumper;
my $scalar = 'sushi';
my $replica = replica_of( $scalar );
print $replica # sushi
print 'Never display this message.' if $replica eq 'sushi';
my @hotdog = qw/bread sausage/;
my @replica = replica_of( \@hotdog );
print Dumper \@replica;
# $VAR1 = [
# 'bread',
# 'sausage',
# ];
print 'Never display this message.' if $replica[0] eq 'bread';
my %buffet_table = (
japanese => 'sukiyaki',
amelican => 'stake',
italian => 'pasta',
);
my %replica = replica_of( \%buffet_table );
print Dumper \%replica;
# $VAR1 = {
# italian => 'pasta',
# japanese => 'sukiyaki',
# amelican => 'stake',
# };
print $replica{japanese}; # Use of uninitialized value in print at test.pl line ...
=head1 DESCRIPTION
This module creates a elaborate replica.
The same as the food sample, it looks so delicious, but you will not able to eat.
=head1 AUTHOR
Kei Shimada C<< <sasakure_kei __at__ cpan.org> >>
=head1 REPOSITORY
git clone git@github.com:sasakure-kei/p5-Acme-Replica.git
=head1 LICENCE AND COPYRIGHT
Copyright (c) 2013, Kei Shimada C<< <sasakure_kei __at__ cpan.org> >>. All rights reserved.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
=cut