substr($_, $fld1_start, $fld1_len) = substr($_,$fld2_start, $fld2_len); #### #!/usr/bin/perl use strict; use warnings; use Data::Dumper; { package Foo; sub new { my $class = shift; return bless( { field => "ABCDEF" }, $class ); } sub field : lvalue { my $self = shift; $self->{'field'}; } } my $f = Foo->new(); print $f->field, "\n"; $f->field = reverse $f->field; print $f->field, "\n"; print Dumper $f; #### ABCDEF FEDCBA $VAR1 = bless( { 'field' => 'FEDCBA' }, 'Foo' ); #### 00001AAAAA 00002AAAAA 00003AAAAA 00004AAAAA 00005AAAAA 00006AAAAA 00007AAAAA 00008AAAAA 00009AAAAA 00010AAAAA #### #!/usr/bin/perl use strict; use warnings; use String; use Data::Dumper; my $str = String->new(); while (<>) { $str->line() = $_; print "BEFORE: "; print Dumper $str; print "A: ", $str->field_int( "a" ), "\n"; print "B: ", $str->field_int( "b" ), "\n"; $str->field_int( "a" ) = $str->field_int( "b" ); print "AFTER: "; print Dumper $str; print "LINE: ", $str->line(), "\n" x4; } #### package String; use strict; use warnings; sub new { my $class = shift; my %arg = @_; my $ddl = { a => { start => 0, length => 5, }, b => { start => 5, length => 5, }, n => { start => 10, length => 1, }, }; my $self = { ddl => $ddl, line => undef, }; bless $self, $class; } sub line : lvalue { my $self = shift; my $line = shift; $self->{'line'}; } sub field_start { my $self = shift; my $field = shift; return $self->{'ddl'}{$field}{'start'}; } sub field_length { my $self = shift; my $field = shift; return $self->{'ddl'}{$field}{'length'}; } sub field_int : lvalue { my $self = shift; my $field = shift; print "SUBSTR: ", substr($self->{'line'}, $self->field_start($field), $self->field_length($field)), "\n"; substr($self->{'line'}, $self->field_start($field), $self->field_length($field) ); } 1; #### BEFORE: $VAR1 = bless( { 'line' => '00001AAAAA ', 'ddl' => { 'n' => { 'length' => 1, 'start' => 10 }, 'a' => { 'length' => 5, 'start' => 0 }, 'b' => { 'length' => 5, 'start' => 5 } } }, 'String' ); SUBSTR: 00001 A: 00001 SUBSTR: AAAAA B: AAAAA SUBSTR: AAAAA SUBSTR: 00001 AFTER: $VAR1 = bless( { 'line' => 'AAAAAAAAAA ', 'ddl' => { 'n' => { 'length' => 1, 'start' => 10 }, 'a' => { 'length' => 5, 'start' => 0 }, 'b' => { 'length' => 5, 'start' => 5 } } }, 'String' ); LINE: AAAAAAAAAA BEFORE: $VAR1 = bless( { 'line' => '00002AAAAA ', 'ddl' => { 'n' => { 'length' => 1, 'start' => 10 }, 'a' => { 'length' => 5, 'start' => 0 }, 'b' => { 'length' => 5, 'start' => 5 } } }, 'String' ); SUBSTR: 00002 A: 00002 SUBSTR: AAAAA B: 00002 SUBSTR: AAAAA SUBSTR: 00002 AFTER: $VAR1 = bless( { 'line' => '00002AAAAA ', 'ddl' => { 'n' => { 'length' => 1, 'start' => 10 }, 'a' => { 'length' => 5, 'start' => 0 }, 'b' => { 'length' => 5, 'start' => 5 } } }, 'String' ); LINE: 00002AAAAA etc.