please use Data::Dumper (or Data::Dump) to show the contents of $vars{refc}
What it showed was that the content was populated. What was causing the entire template to go wonky was that there were more files in rus_captions than in eng_captions or images. I filled undefined things with bubble gum and just got them on the net. Most of the complaining is about not being able to sftp non-existent files. I wanted to come up with some baseline defaults so that the whole page doesn't go down for lack of an image to stand in for a while.
I've gotten rid of a lot of mistakes as I dug my way back into this one. The first was not having brackets around my qw in the initialization of the array:
elt 0 0 is й
elt 0 1 is
elt 0 2 is
elt 0 3 is л
elt 0 4 is
elt 0 5 is
elt 0 6 is с
elt 0 7 is
elt 0 8 is
Can't use string ("о") as an ARRAY ref while "strict refs" in us
+e at template_stuff/utils1.pm line 61.
$
I don't see a way to use Dumper and have that the be cyrillic, because that's what I want to see. I use Dumper for doing anything to get on the scoreboard. (Not such a high price, except that you condemn yourself to read a lot of your own data: uggh)
I've been trying to write a better print_aoa_utf8 but have only partial success. Partially, my data set needed more conditioning. The hardest thing for me to represent like this is a space.
in make russian xword------
elt 0 0 is й
elt 0 1 is
elt 0 2 is
elt 0 3 is л
elt 0 4 is
elt 0 5 is
elt 0 6 is с
elt 0 7 is
elt 0 8 is
elt 1 0 is о
elt 1 1 is б
elt 1 2 is л
elt 1 3 is о
elt 1 4 is м
elt 1 5 is о
elt 1 6 is в
elt 1 7 is '
elt 1 8 is '
elt 1 9 is ш
elt 2 0 is 1
elt 2 1 is 2
elt 2 2 is 3
elt 2 3 is 4
elt 2 4 is 5
elt 2 5 is 6
elt 2 6 is 7
elt 2 7 is 8
elt 2 8 is 9
return1 is nothing nyet
What I have is:
sub print_aoa_utf8 {
use warnings;
use 5.011;
use utf8; # a la François
use open OUT => ':encoding(utf8)';
use open ':std';
my $a = shift;
my @AoA = @$a;
for my $i ( 0 .. $#AoA ) {
my $aref = $AoA[$i];
for my $j ( 0 .. $#{$aref} ) {
print "elt $i $j is $AoA[$i][$j]\n";
}
}
return $a;
}
With my difficulties getting any values initialized. I wonder how I might make it a matter of course and think that a toolkit solution would be a reasonable goal, in particular because I want to have a means for considering fonts, and we saw a tk version of trying out different fonts not long ago.
I had to make sure that all previous russian captions were erased before I went and got more:
print "Make rus captions(y/n)?: ";
my $prompt1 = <STDIN>;
chomp $prompt1;
if ( $prompt1 eq ( "y" | "Y" ) ) {
## delete existing files
foreach my $child ( $vars{rus_captions}->children ) {
my $success = $child->remove;
say "success deleting was $success";
}
my $ref_cap = make_russian_captions($rvars);
}
STDOUT then shows:
Make rus captions(y/n)?: y
success deleting was 1
success deleting was 1
success deleting was 1
success deleting was 1
matching are a.txt b.txt
rus_munge is /home/bob/2.scripts/pages/7.cw/template_stuff/translation
+s/trans.07-01-2019-16-15-08.txt
rus_path is /home/bob/2.scripts/pages/7.cw/template_stuff/ruscaptions/
+a.txt
rus_path is /home/bob/2.scripts/pages/7.cw/template_stuff/ruscaptions/
+b.txt
And I figured all this out by looking at the data as haukex suggested. I've had a nice few days coding that reduces the ugly, but not completely.
sub make_russian_crossword {
use 5.011;
use warnings;
use POSIX qw(strftime);
use Path::Tiny;
use Encode;
use open OUT => ':encoding(UTF-8)', ':std';
use Data::Dumper;
my $rvars = shift;
my %vars = %$rvars;
my $munge = strftime( "p%d-%m-%Y-%H-%M-%S\.txt", localtime);
my $in_path = path( $vars{rus_captions}, $munge )->touchpath;
##Let mother know that you created a file, *verb* a reference:
$vars{log_file}=$in_path;
$rvars = \%vars; #does this line do anything for me?
# open file for writing
# my $fh = path($in_path)->openw_utf8; not helping
say "in make russian xword------";
my $data = $vars{cw_data};
#print Dumper $data;
print_aoa_utf8($data);
#print $fh $data;
my $a = $data;
my @AoA = @$a;
for my $i ( 0 .. $#AoA ) {
my $aref = $AoA[$i];
for my $j ( 0 .. $#{$aref} ) {
"$AoA[$i][$j]";
}
print "\n";
}
# ->append_utf8(@data);
return "nothing nyet"
}
Does the 3rd line here do anything for me or the program?
##Let mother know that you created a file, *verb* a reference:
$vars{log_file}=$in_path;
$rvars = \%vars; #does this line do anything for me?
What I'm reaching for at the end is a control that will go over the array, which can be seen as a column vector of row vectors. I want to iterate over the columns and print out one row at time, with no spaces and a newline at the end. Fishing for notation as to how to do that. With the output as a series of outputs of row vectors, then I think it will fit in well with the Path::Tiny method call append_utf8(@data). Then we can see how these things look on the net. Right now, it's looking pretty stable: crossword prototype shaping up.
Again, very grateful for comments,
|