http://qs1969.pair.com?node_id=632336

Random element from concatenation of two arrays:
C:\chas_sandbox\pwgen> copy con randfromtwo.pl my @array1=('1', '2', '3'); my @array2=('a', 'b', 'c'); print $array1[rand(@array1)]; print $array2[rand(@array2)]; print $oneElementOfTheseTwoArrays = (@array1, @array2)[int(rand($#arra +y1+$#array 2))]; ^Z 1 file(s) copied. C:\chas_sandbox\pwgen> randfromtwo.pl 2ba C:\chas_sandbox\pwgen> randfromtwo.pl 1ba C:\chas_sandbox\pwgen> randfromtwo.pl 1c3 C:\chas_sandbox\pwgen> randfromtwo.pl 3b1 C:\chas_sandbox\pwgen> randfromtwo.pl 3c2 C:\chas_sandbox\pwgen>

C:\chas_sandbox> perl -Mdiagnostics -le "sub doit{$ref=$_;${$ref} = 'nope'};$str='cwh'; +print $str ;doit(\$str);print$str" cwh cwh C:\chas_sandbox> perl -Mdiagnostics -le "sub doit{$ref=$_;${$ref} = 'nope'};$str='cwh'; +print $str ;doit(\\$str);print$str" cwh cwh C:\chas_sandbox> perl -Mdiagnostics -le "sub doit{$ref=$_;$$ref = 'nope'};$str='cwh';pr +int $str;d oit(\\$str);print$str" cwh cwh C:\chas_sandbox> perl -Mdiagnostics -le "sub doit{$ref=$_;$$ref = 'nope'};$str='cwh';pr +int $str;d oit(\$str);print$str" cwh cwh C:\chas_sandbox>

Old stuff below here
C:\chas_sandbox> perl -Mdiagnostics -le "sub doit{$ref=$_;\\$ref = 'nope'};$str='cwh';p +rint $str;doit($str);print$str" Can't modify single ref constructor in scalar assignment at -e line 1, + near "'nope'}" Execution of -e aborted due to compilation errors (#1) (F) You aren't allowed to assign to the item indicated, or otherwi +se try to change it, such as with an auto-increment. Uncaught exception from user code: Can't modify single ref constructor in scalar assignment at -e + line 1, near "'nope'}" Execution of -e aborted due to compilation errors. at -e line 1 C:\chas_sandbox>
For ikeagami
This is grammarharness.pl:
#/usr/bin/perl -Wl use strict; use warnings; use Parse::RecDescent; use Data::Dumper; use Data::Serializer; my $grammar; my $grammarfile = $ARGV[0]; open my $gf,'<',$grammarfile or die 'bad grammarfile'; while (<$gf>) { $grammar.=$_; } close $gf; print '$grammar is ',"\n",$grammar; $::RD_HINT++; #$::RD_TRACE++; my $parser = new Parse::RecDescent ($grammar) or die 'bad grammar'; my $stringtoparsefile = $ARGV[1]; open my $sf,'<',$stringtoparsefile or die 'bad stringstoparse file'; my $result; my $reresult; my $serializer = Data::Serializer->new(portable => '0',serializer => + 'Data::Dumper'); my $outfilebasename = 'data'; my $outfileext = 'out'; my $outfileindex = 10; while (<$sf>) { print 'parsing $_: ',$_; if (defined $parser->startrule($_)){ $result = $parser->startrule($_); print Dumper($result); $serializer->store( $result, $outfilebasename.$outfileindex.'.'.$outfileext, '>>' ); $reresult = $serializer->retrieve( $outfilebasename.$outfileindex++.'.'.$outfileext, ); print Dumper($reresult); }else{ print " badstring\n"} }

This is packagegrammar.txt:
startrule: commandline{$item{commandline}} commandline: command options {[$item {command},$item{options}]} command: packagecommand {$item{packagecommand}} packagecommand: /(hap)/ | /(hccmrg)/ | /(hup)/ | /(hspp)/ | /(hpp)/ | +/(hpg)/ | /(hdp)/ | /(hdlp)/ | /(hcp)/ options: option(s?) option: optionflag optionvalue { [$item{optionflag}, $item{optionvalue +}?$item{optionvalue}:1] } optionflag: /(-\w+)/ { $1 } optionvalue: /(\w*)/ { $1 }

This is packagecommands.txt:
hap -b hap -b sknxharvest01 hap -b sknxharvest01 -enc testfile.dfo hap -b sknxharvest01 -usr cgowing -pass chaspass hap -badflag hap -prompt hap -b sknxharvest01 -prompt hap -prompt -b sknxharvest01

All that's working, but I'm thinking of de-serializing and turning the data back into a packagecommand string. I'm thinking Since I wrote the grammar to go one direction, it ought to work the otherway, but haven't seen that it does. P::RD::Deparse is totally irrelevant since it deparses the parser back into a grammar.
What I want is to take $result and turn it back into a command string (hopefully using the same grammar).