in reply to Re: calling MATLAB from perl in order to create a .mat file
in thread calling MATLAB from perl in order to create a .mat file

Kenneth, The Perl code I put together: #!/fs/COTS/gnu/bin/AIX/perl open(MATLAB,"| /home/sis3ewh/run_matlab -nojvm"); use FileHandle; MATLAB->autoflush(1); print MATLAB "timer = struct('seconds',289567981,'nano',944567000,'raw',[],'eng',char('Initializing'));save timer;\n"; What I'm hoping for is the following when loaded into MATLAB: timer = seconds: 289567981 nano: 944567000 raw: [] eng: 'Initializing I get dumped into MATLAB but no .mat MATLAB appears anywhere with the name "timer.mat" and I can't figure out where the problem is. Maybe some Monks are x-matlab gurus! At any rate, any help would be appreciated - thanks!!
  • Comment on Re^2: calling MATLAB from perl in order to create a .mat file

Replies are listed 'Best First'.
Re^3: calling MATLAB from perl in order to create a .mat file
by kennethk (Abbot) on Jan 20, 2010 at 15:36 UTC
    First, please read Writeup Formatting Tips, since your lack of <code> tags seriously impedes the legibility of your post. As well, the liberal addition of some <p> tags to break up the text would be helpful.

    I can say there are no immediately clear errors in the posted code, but again I have not worked with MATLAB on the command line for quite some time. You do some things I would consider quite poor form, such as not testing for the success of your open, using bareword file handles and using 2-argument open, but these are not syntax errors.

    A potentially much cleaner solution is rather than piping into the executable is use your Perl script to explicitly generate a .m file, and then execute the .m using system or backticks. In this way, you will have an audit trail so you can figure out which language is giving you problems - I frequently take this autogeneration approach with auxilliary programs. Remember that Perl was originally designed for text processing and does it exceptionally well. Perhaps this will give you some ideas:

    #!/usr/bin/perl use strict; use warnings; open(my $matlab, '>', 'm_file.m'); print $matlab <<EOF; x=1; save timer; EOF system('matlab -nojvm -r m_file');
      Ken, Poor form aside - which I'll work on - I can execute MATLAB from within Perl but given the following: <x=0,1,2;y=0,1,2;plot(x,y,'o');save test;> can Perl create a .mat file with these statements so that the file "test.mat" would be created?
        For the piping scenario you used above (Using open() for IPC), the question is not can Perl create a .mat file but can MATLAB. This literally feeds these commands to the MATLAB executable via its command line interface, and hence my concern about not working with command line MATLAB for about a decade.
Re^3: calling MATLAB from perl in order to create a .mat file
by Anonymous Monk on Jan 20, 2010 at 12:29 UTC
    Why aren't you putting your code in <CODE></CODE> tags?
      .soory about that - I'll do this from here on out.... wasn't familiar with the <code> tag which I realize is no excuse....