The following sections list a few of the extras that either come with Mac OS X or can be easily installed. 10.1.1 Mac::CarbonThis module comes by way of MacPerl (http://www.macperl.org), a distribution of Perl for Mac OS 9 and earlier. Mac::Carbon (available from the Download link on the MacPerl web site) gives Perl programmers access to the Carbon APIs. Its test suite is great; make sure you have your speaker volume turned up when you run it. One of the many modules included with Mac::Carbon is MacPerl; here's an example that pops up a dialog box and asks a question: #!/usr/bin/perl -w use MacPerl qw(:all); $answer = MacPerl::Ask("Tell me how good you thought my poem was."); if ($answer =~ /counterpoint the surrealism of the underlying metaphor/i) { $die_in_the_vacuum_of_space = 1; } You can install Mac::Carbon with the CPAN shell, described later in this chapter. After it's installed, you can read the documentation with perldoc Mac::Carbon . 10.1.2 PerlObjCBridge.pmThis module ships along with Mac OS X, and it gives you a way to call into the Objective-C runtime on Mac OS X. Given an Objective-C call of the form: Type x = [Class method1:arg1 method2:arg2]; you can use the equivalent Perl code: $x = Class->method1_method2_($arg1, $arg2); You could also create an NSString and display it with the following script: #!/usr/bin/perl -w use strict; use Foundation; # import Foundation objects my $string = NSString->stringWithCString_("Hello, World"); print $string, "\n"; # prints NSCFString=SCALAR(0x858398) print $string->cString( ); # prints Hello, World You can read the documentation for this module with perldoc PerlObjCBridge . 10.1.3 Mac::GlueThis module lets you invoke Apple Events from Perl. To use it with an application, you'll need to create a layer of glue between this module with the gluemac utility, which is installed along with Mac::Glue. For example, to create the glue for the Terminal application, do the following: $ sudo gluemac /Applications/Utilities/Terminal.app/ Password: ******** What is the glue name? [Terminal]: Created and installed App glue for Terminal.app, v1.4.1 (Terminal) This also creates documentation for the module. To read it, use perldoc Mac::Glue::glues:: appname , as in perldoc Mac::Glue::glues::Terminal . Here's a short example that uses the Terminal glue to open a telnet session to the Weather Underground : #!/usr/bin/perl -w use strict; use Mac::Glue; my $terminal = new Mac::Glue 'Terminal'; $terminal->geturl("telnet://rainmaker.wunderground.com"); You can install Mac::Glue with the CPAN shell (described later). There are many complicated dependencies; we found that Mac::Glue failed the first time through on one of the dependencies, and again the second time we tried to install it. We quit the CPAN shell, restarted it, and tried the install a third time ”that was the charm . When you install Mac::Glue, pay close attention to the list of glues it creates, so you don't end up recreating them unnecessarily. When we installed Mac::Glue, this was its output: Created and installed Dialect glue for AppleScript.rsrc (AppleScript) Created and installed Addition glue for Digital Hub Scripting.osax (Digital_Hub_Scripting) Created and installed Addition glue for StandardAdditions.osax (StandardAdditions) Created and installed App glue for Image Capture Scripting.app (Image_Capture_Scripting) Created and installed App glue for Finder.app, v10.3 (Finder) Created and installed App glue for Keychain Scripting.app (Keychain_Scripting) Created and installed App glue for System Events.app, v1.2.1 (System_Events) Created and installed App glue for ColorSyncScripting.app (ColorSyncScripting) Created and installed App glue for URL Access Scripting.app (URL_Access_Scripting) Created and installed App glue for FontSyncScripting.app, v2.0d1 (FontSyncScripting) |