in reply to Re^5: Substitute script for a newbie
in thread Substitute script for a newbie

There isn't a hard rule, just individual cases like

A.TL5E00* becomes +TL\E5C*, A.TL5F00* becomes +TL\F5C*, and A.TL5G00* becomes +TL\G5C*.

I've actually made great progress on my own. I think my only obstacle is still how to format the substitution string so it will read things like '\F' as a string and not a function

Here is my latest version. The output is ugly since it has the $VAR tags (this is something I should be able to fix), but I am feeling a lot better about where I am at

use strict; use warnings; use Data::Dumper; my $input = 'TAV.stock.opt.oldsym.txt'; my @NewSym; { unless(open(INPUT,$input)) { die "\nCannot open $input\n"; } <INPUT>; my @lines; while(my $line = <INPUT>) { chomp $line; if ($line =~ m/^A.TL5E00/) { $line =~ s/A.TL5E00/+TL\E5C/g; push @NewSym,$line; } } close INPUT; print Dumper(@NewSym); }

Replies are listed 'Best First'.
Re^7: Substitute script for a newbie
by Laurent_R (Canon) on Jul 14, 2015 at 20:07 UTC
    Hmm, just something that might help simplify quite a bit your program.
    if ($line =~ m/^A.TL5E00/) { $line =~ s/A.TL5E00/+TL\E5C/g; push @NewSym,$line; }
    might probably be rewritten in a simpler fashion:
    push @NewSym, $line if $line =~ s/^A.TL5E00/+TL\E5C/g;
    I haven't tested it on real data (you did not supply any), but it seems to work properly, as shown in this session under the Perl debugger:
    $ perl -de 42 Loading DB routines from perl5db.pl version 1.33 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 42 DB<1> $line = "A.TL5E00xxxx"; DB<2> push @NewSym, $line if $line =~ s/^A.TL5E00/+TL\E5C/g; DB<3> x @NewSym 0 '+TL5Cxxxx'
    If the substitution does not find a match, it will report a false value and the push will not be executed.