in reply to Substitutions Within Substitutions
This* seems to work:
#! perl -slw use strict; local $/ = ''; # paragraph mode while( my $clause = <DATA> ) { $clause =~ s[ ( create \s+ table \s+ \S+ \s+ \( ) ( .+ ) ( \) \s* )$ ]{ my( $x, $y, $z ) = ( $1, $2, $3 ); $y =~ s[(?<!null)(,|\Z)][ not null$1 ]g; "$x$y$z"; }esx; print $clause; } __DATA__ create table foo ( somevar1 sometype, somevar2 sometype null, somevar3 sometype not null, somevar4 sometype(20), somevar5 sometype(20) null, somevar6 sometype(10)) create table foo ( somevar1 sometype , somevar2 sometype null , somevar3 sometype not null, somevar4 sometype (20), somevar5 sometype(20) null, somevar6 sometype(10 )) create table foo ( somevar1 sometype, somevar2 sometype null, somevar3 sometype not null, somevar4 sometype(20), somevar5 sometype(20) null, somevar6 sometype(10))
Produces
C:\test>junk3 create table foo ( somevar1 sometype not null, somevar2 sometype null, somevar3 sometype not null, somevar4 sometype(20) not null, somevar5 sometype(20) null, somevar6 sometype(10) not null ) create table foo ( somevar1 sometype not null, somevar2 sometype null not null, somevar3 sometype not null, somevar4 sometype (20) not null, somevar5 sometype(20) null, somevar6 sometype(10 ) not null ) create table foo ( somevar1 sometype not null, somevar2 sometype null +, somevar3 sometype not null, somevar4 sometype(20) not null, somevar5 sometype( +20) null, somevar6 sometype(10) not null )
*Note: I've use a simplified regex to demostrate the nested substitution technique. You will probably need to improve it match SQl syntax.
|
|---|