in reply to Re^3: Question about warnings and arrays
in thread Question about warnings and arrays

you guys are awesome as always :)
i will go back and revise my code with hopes it comes out this neat. BUT i need also to know how i can reopen each file and write these pointer values back. See, what this programs main goal is, is to fix another programs mess ups lol. This program i have written goes to text entry and gets the pointer value, which should be written in the upper half of the file and overwriting the incorrect pointer value. if i were to push all the pointers to the array, would it work right if i did a foreach my $line(@array) as to where i could open the files and re write the values in succesion?

OR better that than, i could push pointer to an array, and before closing the file, i could go ahead and do the foreach $line(@array) which would hopefully write the pointers as their correct offset. then once all pointers are written, i could clear the array and open next files and start again.

I guess my next question is, can i loop thru an array like that? and expect the outcome to be right? and apologies for taking so long to respong
  • Comment on Re^4: Question about warnings and arrays

Replies are listed 'Best First'.
Re^5: Question about warnings and arrays
by Anonymous Monk on Aug 13, 2014 at 11:20 UTC

    Well, theoretically the answer to three of your questions is yes, it's possible, if you code it correctly ;-)

    Other than that, we'd need to see some example expected output and some of the code your questions are about. Please have a look at I know what I mean. Why don't you? (as well as the usual How do I post a question effectively?).

    In general, you can open a binary file for editing via open my $fh, '+<:raw', $filename or die $!;

      let me give an example:
      use File::Slurp; open ( my $file, '<', "file" ); binmode($file); my @array = read_file ("pointers"); seek ( $file, 0x67, 0 ); print $file @array[0]; foreach ( my $line(@array){ chomp ( $line ); seek ( $file, 20, 0 ); print ( $file $this ); }
      this is the code i have tried. it will write to the file, but not in an expected way. As you know i do most of my work/programs on binary files. so the data being pushed to the array will have to be written back to the file, but as byte characters/hexadecimal characters and in raw format.

      so when it puts "29" into the array, i need it to write 29 in the raw file as a byte, and the code above writes it as a character 29 (which is 32 39 in plain text).

      The open file is in raw or binary mode, but it writes in text mode from the array. i need to write in binary mode. if you run the script on the files i posted earlier, then you can make a file with this in it:
      21 4B A8 C6
      and read that into an array, then try to write from the array to a raw file, it doesnt work, and looks to still write to the raw file in text mode. and if i try to binmode the array, it throws errors as expected.

      im am very confused at this point, as i need to write the pointers back to the file but in raw/binary mode. and i am unsure how to do that from an array because it looks as if it writes back to a raw file in text mode.
        What's in @array? Maybe you need to pack your data before printing them?
        لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ