in reply to Re: How do you properly use a variable for FILEHANDLE in print vs open
in thread How do you properly use a variable for FILEHANDLE in print vs open

First off, Thanks, for the feedback.

To answer Chromatics question:

I should preface that I am an Architecture graduate, who dabbles in code. I have had no formal training in coding... so if the following sounds, well just wrong, it just may be.
I want, to create then manipulate and finalize as one continuos process on several files at once. Logic being If I can access multiple files at the same time I can process things faster. Therefore using a fixed filehandle, seems limiting.
Figured since I could create the file and name it based on a predetermined content, then I could edit based on the file name. To allow other scripts to manipulate files I would need to use a unique FILEHANDLE to call on, a at-runtime-variable-filehandle keyed to the content would keep each file unique, baring duplicates.

My initial test script to test the at-runtime-variable-filehandle idea worked, yet with the strict pragma invoked the test script failed. Thus my confusion... and the need for help.

After some thinking time and some Perlref reading, I think I figured things out...
Using $::{'comb'} instead of $comb or '$comb' for the OPEN function.
Using { $::{'comb'} } instead of $comb for the PRINT function.
If I understand correctly, the use of $::{'comb'} derefences the content of the $comb variable.
My previous use of the $comb variable, in the OPEN function worked since the string was accepted, and a filehandle was created. In the PRINT function, which expects a FILEHANDLE but will accept a { block }, the string caused a compile error when using the STRICT pragma.
Now the following code works w/ the STRICT pragma:
As Zaxo pointed out my previous posting had some errors, I incorrectly copied the code. I tried to trim the code to just what is needed... for it to work. I still have a long way to go...
require("hlpsymbgen.config"); # general variables use diagnostics; use strict; open (SCINDEX, "$::inputDir\\SymbolCategories.txt") || die "Failed to Open SymbolCategories.txt. \n"; my $comb; while (<SCINDEX>){ my $cat_title = $_; my $var_c = $_; my $sufix = "_INDEX"; if ($cat_title ne 'NULL' && $var_c =~ m/::/o == 0){ $cat_title =~ s/(^[A-Z]{4})(.*)/$1/o; $cat_title =~ s/\n|\r//g; $cat_title =~ s/\s//g; $comb = $cat_title . $sufix; open ($::{'comb'}, ">$::outputDir\\" . $cat_title . "index.html" +) || die "Failure to create" . $cat_title . "\n"; print { $::{'comb'} } $var_c . "content detail for file found\n"; close $::{'comb'}; } } close SCINDEX;
I don't know if the initial idea will work and I may end up having to use the fixed FILEHANDLE name. In the end whatever I end up with will be faster than doing by hand.
Thanks for the help.
joseph-
  • Comment on Re^2: How do you properly use a variable for FILEHANDLE in print vs open
  • Download Code