annotate scripts/miscellaneous/perl.m @ 31132:0f4d16af143b

perl.m, python.m: Redo input validation. * perl.m, python.m: Redo input validation to check for correct number of arguments as well as type. Issue more informative error messages when validation fails. Add more BIST tests for input validation.
author Rik <rik@octave.org>
date Sat, 09 Jul 2022 11:11:53 -0700
parents 796f54d4ddbf
children 597f3ee61a48
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
3 ## Copyright (C) 2008-2022 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26699
diff changeset
4 ##
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
7 ##
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
8 ## This file is part of Octave.
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
9 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23220
diff changeset
10 ## Octave is free software: you can redistribute it and/or modify it
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
11 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23220
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
13 ## (at your option) any later version.
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
14 ##
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
15 ## Octave is distributed in the hope that it will be useful, but
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
18 ## GNU General Public License for more details.
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
19 ##
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
20 ## You should have received a copy of the GNU General Public License
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
21 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23220
diff changeset
22 ## <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 ##
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ########################################################################
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
25
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
26 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20713
diff changeset
27 ## @deftypefn {} {@var{output} =} perl (@var{scriptfile})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20713
diff changeset
28 ## @deftypefnx {} {@var{output} =} perl (@var{scriptfile}, @var{argument1}, @var{argument2}, @dots{})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20713
diff changeset
29 ## @deftypefnx {} {[@var{output}, @var{status}] =} perl (@dots{})
14818
c6ae30f73946 Look for perl/python scripts in Octave load path (bug #36729)
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
30 ## Invoke Perl script @var{scriptfile}, possibly with a list of command line
19215
c61deba773ab Add BIST test to perl() and python().
Rik <rik@octave.org>
parents: 17744
diff changeset
31 ## arguments.
c61deba773ab Add BIST test to perl() and python().
Rik <rik@octave.org>
parents: 17744
diff changeset
32 ##
c61deba773ab Add BIST test to perl() and python().
Rik <rik@octave.org>
parents: 17744
diff changeset
33 ## Return output in @var{output} and optional status in @var{status}. If
20713
2469d78a1d8b Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents: 19697
diff changeset
34 ## @var{scriptfile} is not an absolute filename it is searched for in the
19215
c61deba773ab Add BIST test to perl() and python().
Rik <rik@octave.org>
parents: 17744
diff changeset
35 ## current directory and then in the Octave loadpath.
14818
c6ae30f73946 Look for perl/python scripts in Octave load path (bug #36729)
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
36 ## @seealso{system, python}
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
37 ## @end deftypefn
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
38
31132
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
39 function [output, status] = perl (scriptfile, varargin)
7679
3c16e2414564 perl: don't provide default value for varargin
John W. Eaton <jwe@octave.org>
parents: 7675
diff changeset
40
31132
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
41 if (nargin < 1)
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
42 print_usage ();
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
43 endif
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
44
31132
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
45 if (! ischar (scriptfile) || isempty (scriptfile))
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
46 error ("perl: SCRIPTFILE must be a non-empty string");
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
47 endif
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
48 if (nargin > 1 && ! iscellstr (varargin))
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
49 error ("perl: ARGUMENTS must be strings");
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
50 endif
14818
c6ae30f73946 Look for perl/python scripts in Octave load path (bug #36729)
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
51
31132
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
52 if (numel (scriptfile) < 2 || ! strcmp (scriptfile(1:2), "-e"))
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
53 ## Attempt to find file in loadpath. No effect for absolute filenames.
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
54 scriptfile = file_in_loadpath (scriptfile);
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
55 endif
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
56
31132
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
57 [status, output] = system (["perl " scriptfile ...
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
58 sprintf(" %s", varargin{:})]);
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
59
7675
8abada567409 perl.m: new function
Julian Schnidder <j.schnidder@gmx.de>
parents:
diff changeset
60 endfunction
17338
1c89599167a6 maint: End m-files with 1 blank line.
Rik <rik@octave.org>
parents: 16994
diff changeset
61
19215
c61deba773ab Add BIST test to perl() and python().
Rik <rik@octave.org>
parents: 17744
diff changeset
62
31132
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
63 ## Test input validation
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
64 %!error <Invalid call> perl ()
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
65 %!error <SCRIPTFILE must be a non-empty string> perl (123)
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
66 %!error <SCRIPTFILE must be a non-empty string> perl ("")
0f4d16af143b perl.m, python.m: Redo input validation.
Rik <rik@octave.org>
parents: 30564
diff changeset
67 %!error <ARGUMENTS must be strings> perl ("perlfile", 123)