Colin Johnstone wrote: > > Gidday all, Hello,
> I want to create an array and then remove elemnets one at a time and split on the >comma. > > I've tried this with no success.. > > #!/usr/bin/perl -w > > print "Content-Type: text/html\n\n"; > > my @arrayStuff; > > $arrayStuff[0] = "albu.htm,3.4.1.5.1,albu_menu.inc,albu.inc"; > $arrayStuff[1] = "armi.php,3.4.1.5.2,armi_menu.inc,armi.inc"; > $arrayStuff[2] = "bank.htm,3.4.1.5.3,bank_menu.inc,bank.inc"; > $arrayStuff[3] = "bate.htm,3.4.1.5.4,bate_menu.inc,bate.inc"; You can declare and define the array at the same time: my @arrayStuff = ( 'albu.htm,3.4.1.5.1,albu_menu.inc,albu.inc', 'armi.php,3.4.1.5.2,armi_menu.inc,armi.inc', 'bank.htm,3.4.1.5.3,bank_menu.inc,bank.inc', 'bate.htm,3.4.1.5.4,bate_menu.inc,bate.inc', ); But since you are just going to split it up anyways, you should use an array of arrays: my @arrayStuff = ( [ 'albu.htm', '3.4.1.5.1', 'albu_menu.inc', 'albu.inc' ], [ 'armi.php', '3.4.1.5.2', 'armi_menu.inc', 'armi.inc' ], [ 'bank.htm', '3.4.1.5.3', 'bank_menu.inc', 'bank.inc' ], [ 'bate.htm', '3.4.1.5.4', 'bate_menu.inc', 'bate.inc' ], ); Or you could even use an array of hashes: my @arrayStuff = ( { OutFile => 'albu.htm', PageId => '3.4.1.5.1', Menu => 'albu_menu.inc', Content => 'albu.inc' }, { OutFile => 'armi.php', PageId => '3.4.1.5.2', Menu => 'armi_menu.inc', Content => 'armi.inc' }, { OutFile => 'bank.htm', PageId => '3.4.1.5.3', Menu => 'bank_menu.inc', Content => 'bank.inc' }, { OutFile => 'bate.htm', PageId => '3.4.1.5.4', Menu => 'bate_menu.inc', Content => 'bate.inc' } ); > my $fileName = "/web/schooled/www/skin.php"; > my $outFilePath = "/web/schooled/www/hscdata2/"; > > if( ! -e $fileName){ > print "Nothing to Work with!<br>"; > } > else{ > > while( @arrayStuff ){ > $element = shift( @arrayStuff ) > @data = split( /\t/, $element); > > my $outFileName = $data[0]; > my $strPageId = $data[1]; > my $pageMenu = $data[2]; > my $pageContent = $data[3]; > > my $output = ""; > open(IN, "<$fileName") or die("Cannot open: $!"); You are opening and reading $fileName once for each entry in @arrayStuff. It would be more effecient to open and read the contents just once. > while( my $line = <IN>){ > $line =~ s/<!-- pageId here -->/$strPageId/; > $line =~ s/<!-- menu here -->/<? include "$pageMenu.inc"; ?>/; > $line =~ s/<!-- content here -->/$pageContent/; > $output .= $line; > } > close(IN); > > open(OUT, ">$outFilePath$outFileName"); > print OUT ($output); > close(OUT); > > print "Generating output file $outFileName<br/>"; > } > > The output I get is:- > > Generating output file > Generating output file > Generating output file > Generating output file #!/usr/bin/perl -w use strict; use CGI qw/:standard/; print header; my @arrayStuff = ( { OutFile => 'albu.htm', PageId => '3.4.1.5.1', Menu => 'albu_menu.inc', Content => 'albu.inc' }, { OutFile => 'armi.php', PageId => '3.4.1.5.2', Menu => 'armi_menu.inc', Content => 'armi.inc' }, { OutFile => 'bank.htm', PageId => '3.4.1.5.3', Menu => 'bank_menu.inc', Content => 'bank.inc' }, { OutFile => 'bate.htm', PageId => '3.4.1.5.4', Menu => 'bate_menu.inc', Content => 'bate.inc' } ); my $fileName = '/web/schooled/www/skin.php'; my $outFilePath = '/web/schooled/www/hscdata2'; for my $stuff ( @arrayStuff ) { open my $fh, '>', "$outFilePath/$outFileName" or die "Cannot open $outFilePath/$outFileName: $!"; $stuff->{Handle} = $fh; } open my $fh, $fileName or die "Cannot open $fileName: $!"; while ( my $line = <$fh> ) { for my $stuff ( @arrayStuff ) { if ( $line =~ /^(.*?)<!-- pageId here -->(.*)\z/s ) { print {$stuff->{Handle}} $1, $stuff->{PageId}, $2; } elsif ( $line =~ /^(.*?)<!-- menu here -->(.*)\z/s ) { print {$stuff->{Handle}} qq[$1<? include "$stuff->{Menu}"; ?>$2]; } elsif ( $line =~ /^(.*?)<!-- content here -->(.*)\z/s ) { print {$stuff->{Handle}} $1, $stuff->{Content}, $2; } else { print {$stuff->{Handle}} $line; } } } close $fh; __END__ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]