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

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.

Replies are listed 'Best First'.
Re^7: Question about warnings and arrays
by choroba (Cardinal) on Aug 13, 2014 at 12:58 UTC
    What's in @array? Maybe you need to pack your data before printing them?
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
      yoru a genius D:< it would have took me a few days to even think about that prob lol EDIT: nope, i get error when i try to pack the data to any format and it still writes in text mode.
        You want to binmode $filehandle; perhaps?

        What did you try? Please remember to show your sample input, code, expected output vs. actual output (incl. error messages), otherwise we can't help much.

        Also please mark hexadecimal numbers as such, since apparently you mean 0x29==41 instead of 29, as well as 0x32 and 0x39 for the ASCII string "29".

        Anyway, pack works fine for me:

        $ perl -MData::Dump=pp -le 'print pp pack("C", 0x29)' ")"

        For this new problem you might want to start a new thread since this one is starting to get fairly deep (and remember How do I post a question effectively?).