in reply to Re: Copying a hash to an array of hashes.
in thread Copying a hash to an array of hashes.

Hi Kenneth

I'm using the code you suggested, but I'm not sure that I'm getting what I need. The code I have is:

    push @gl_thread_queue_arr, $ffmpeg;    # Add job to Ffmpeg queue

This creates $gl_thread_queue_arr[0] in the shape of %ffmpeg, which is perfect. Then I start to create the next ffmpeg job. The first thing is that the output file changes, so I reflect that in %ffmpeg with:

    $ffmpeg->output_file('media\a_' . $gl_id_txt . "_" . $gl_examination_dte . "_" . $gl_edit_mode . '.avi');

and now $gl_thread_queue_arr[0] changes to the new file name, which is not right. What am I doing wrong?

Interestingly, if I setup both the jobs in separate subroutines, so that $ffpmeg goes out of scope between job setups, there is no problem.

Regards

Replies are listed 'Best First'.
Re^3: Copying a hash to an array of hashes.
by kennethk (Abbot) on Sep 21, 2009 at 16:10 UTC
    The issue you are encountering is that the first element of @gl_thread_queue_arr is still a reference to the same object you are now modifying. If you want to create a new ffmpeg job, you need to create a new ffmpeg object to reference it. Something like this (built off the FFmpeg::Command example, untested):

    use FFmpeg::Command; my @gl_thread_queue_arr = (); while (<DATA>) { my @options = split; my $ffmpeg = FFmpeg::Command->new('/usr/local/bin/ffmpeg'); $ffmpeg->input_options({ file => $options[0], }); # Set timeout $ffmpeg->timeout(300); # Convert a video file into iPod playable format. $ffmpeg->output_options({ file => $options[1], device => 'ipod', }); push @gl_thread_queue_arr, $ffmpeg; # Add job to Ffmpeg queue } foreach my $ffmpeg (@gl_thread_queue_arr) { my $result = $ffmpeg->exec(); croak $ffmpeg->errstr unless $result; } __DATA__ input_file1 output_file1 input_file2 output_file3 input_file3 output_file2

      Hi Kenneth

      Thanks for all the trouble you went to. You are quite right, I needed to have mutliple "new"s.

      It's all more or less in working order now and I'm unit testing for the normal problems. Thanks again

      Regards