Like variables, procedures in MEL have scope, meaning that the conditions
of how they're defined determines where they can be used.
As a rule, a procedure defined in the script editor, by hand, is global, and like a global variable,
can be used anywhere in any MEL script you run, whether it's in a MEL
file in your script path or defined in the script editor by typing it in.
Procedures are often defined by putting them in MEL files in the script
path, usually in your maya/scripts directory. Then, either the
procedure is defined when you use the source command to load the MEL
file, or the file is sourced automatically if (and only if) certain
conditions explained below are met.
When you define a procedure in a MEL file, normally it cannot be used
outside that file even if you source
the .mel file! For example, make a file containing this in
your maya/scripts
directory, and name it test.mel:
proc
testing () { print "it worked!\n"; }
Now, in the script editor, execute these commands:
source
"test.mel"; testing();
You'll get an error. Even though Maya found and ran the file
test.mel, it could not see the procedure testing contained within it,
because that procedure (like a variable defined in a MEL file) is local to that MEL file.
Now, exit Maya and edit that MEL file to contain this:
global
proc testing () { print "it worked!\n"; }
Run Maya again, then run the commands to source the file and execute
the global procedure. Now, you should get a satisfying message
saying that your experiment worked.
Using the global keyword to define the procedure, then, makes it
available outside the MEL file in which it's defined.
Now, exit Maya and edit the MEL file to contain this:
global
proc test () { print "it worked!\n"; }
This subtle change renames the global procedure to have the same name
as the MEL file (except for the .mel extension.) Now, start Maya,
and run the procedure without
sourcing the file:
test();
The procedure should run without having sourced the file.
Maya is able to automatically source .mel files in your script path if
you are calling a global procedure with the same name as the containing
file. So, most of the time, you'll create at least one global
procedure inside a .mel file that will serve as that script's entry point, or the first code to
be executed in the script.
Procedures that you only want to use within other procedures in that
MEL file can be defined with proc
alone, and procedures that you want to expose to the outside world of
other MEL files or the script editor should be defined with global proc.
Note that sometimes you will install a command (in the form of a
procedure you've written) to execute when a user clicks a button in a
user interface. This kind of procedure is often called a button action procedure.
These commands must be declared
global, even though it looks like you are using them within the same
Maya file. The reason is that all you are doing when you declare
a command to associate with a button is storing the name of the command
for later use. When the button is clicked, Maya, outside that MEL file in which you
defined the button, runs that command, and if the command is not global,
the button will do nothing.