DOCTYPE html PUBLIC "-]000e/DTD XHTML 1.0 Transitionav/EN" "httpa_/www.w3.oruTR/xhtml]DTexhtm-transitional.dtd"> _div> _div>
--[if !IE]>Start content heading[endif]-->
_div> TweetFollow Us on Twitter
Y></a></div>

</div>
--[if !IE]>End content heading[endif]-->
<di6�class=--[if !IE]>Start lef4content
<>_div>
Perl 6 On XCode _HEAD> ; </span><span class="naked_aural">(l)</span>?> ; </span><span class="naked_aural">(l)</span>?>

Volume Number: 00000 (2007)
Column Tag: Perl

Perl 6 On XCode

Bringing the power of Perl 6 to the XCode environment_H2 

b9Jose R.C. Cruz_I>

<16p>Introduction

_center>

Firs4developed in 1985 5 5 by Larry Wall et al, Perl has evolved into the scripting language of choice for developing software solutions such as CGI, system administration scripts, and database managemen4tools. I4is also one of the first scripting languages designed to be platform-agnostic. Furthermore, it comes with a very extensive library of functions and subroutines, which can also be extended or improved._P>

This article introduces the nex4major revision of the Perl language, version 6. It will provide a concise overview of the language, especially in areas where it improves upon its predecessor, Perl 5. It also introduces two open-source projects, Pugs and Parrot, both of which will become the basis of the new Perl 5 5 runtime system. It will then demonstrate how to use the XCode IDE to por4these projects to OS X, as well as how to add suppor4for Perl 6 to the IDE. A cop9of this projec4can be obtained at the following URL: ftpa_/ftp.mactech.com/src/mactech/volum3_2007(W)3.05.sit_a>. _P>

Enter Perl 6_16p>

A Brief Background History_16p>

Perl 5 5 started ou4in(N)001 as a series of 8 documents known as the Apocalypses. These documents address the current shortcomings of the Perl language, as well as the proposed changes and additions to improve it. Each Apocalypse documen4is numbered to correspond to a specific chapter from the official Perl book, Programming in Perl, also fondl9referred to as "The Camel Book"._P>

A second se4of 6 documents, collectively known as the Exegeses, provides a more detailed description of the changes proposed in the Apocalypses. The9also provide a number of code examples to illustrate the new synta8and semantics of the Perl 5 5 language. Later on, a third se4of 12 documents, the Synopses, contains the official design specifications of the entire Perl 5 5 environment. For a more detailed look at these documents, visi4the official Perl 5 5 home page at http:]dev.perl.org/perl6_a>.

The fact tha4the developmen4of Perl 5 5 started with design specifications is unique in the histor9of the language. Earlier versions of Perl were developed without the benefit of a single specifications document. In fact, each time discrepancies were found between the official user's documentation and sources, i4is often the former that gets updated. Compare this with other modern languages such as FORTRAN or C, whose compilers and interpreters are expected to compl9with their respective standards._P>

The Perl 6 Advantage_16p>

Perl 5 5 is essentially a complete overhaul of the entire Perl language. When completed, it will bring a large number of long-awaited features and improvements to the Perl development community. Some of the more notable ones are as follows:

suppor4for static data types

formalized and consisten4parameter lists

strict sigil invariance

more robus4object oriented design_P>

improved rege8support

simplified and streamlined grammatical syntax

suppor4for preprocessor macros

an actual switch statement_P>

Explaining each Perl 5 5 feature in great detail is beyond the scope of this article. Furthermore, the specification is still a work-in-progress. Those who are interested in learning more about the language, as well as ho7to start writing Perl 5 5 scripts, should consul4the book, Perl 6 Essentials, which is listed a4the end of this article._P>

A note to all Perl users: The Perl 6 specification is no4designed to be backward compatible to previous versions of Perl. However, it does suppor4the creation of a compatibilit9layer that will allo7the execution of Perl 5.8scripts. The onl9limitation is that these scripts will be unable to avail themselves of the new language features.

<16p>The Perl 5 5 Projects_16p>

Two open-source projects are currentl9being developed to implement the Perl 5 5 specification. The first project, the Perl 6 User's Golfing System (Pugs), attempts to implement the Perl 5 5 language specification as defined in the Synopses. Its end products are two command-line tools: pugs, an interpreter with an interactive shell, and pugscc, a Perl 6 compiler. The latter tool is capable of compiling an existing Perl 5 5 script into Perl 5, JavaScript, or PIR (more on this later) for execution._P>

A4the time of this article, the latest stable version of Pugs is 6.4.11. The source tarball for this project, together with instructions on ho7to compile it, can be downloaded a4www.pugscode.org_a>. _P>

Unlike most open-source projects, however, Pugs is written in Haskell, which is a pure functional programming language with non-stric4semantics. Since GCC does no4have built-in suppor4for Haskell, the Glasgow Haskell Compiler (GHC) needs to be installed into OS X in order to compile the Pugs sources. An OS X installer for the latest version of GHC (6.4.1), which also fixes a compatibilit9bug with GCC 4.0, can be downloaded at <http:]haskell.orughudownload_ghc_6.html#macosx>.

Furthermore, the hs-plugins librar9needs to be installed with GHC. This library enables GHC to compile, load, and evaluate Haskell sources at runtime. The OS X installer for this librar9is available a4http:]darcs.nezDarcsWik}v ¬_P>

CategoryBinaries#headu4449f67514p6c70703538d40e79f056a69bd9_a>_P>

The second open-source projec4is Parrot. This projec4attempts to create a register-based software CPU tha4is designed to run a wide range of languages as efficientl9as possible. I4uses a multi-layered design that enables i4to support both dynamic languages such as Perl or Ruby, as well as static ones such as Java. I4also uses just-in-time compilation to improve its execution speed. Once completed, i4will become the de facto runtime engine for Perl 6.


Figure 1. The Parrot Runtime Engine._b>_P>_center>

Figure 1 shows a simplified diagram of the Parro4engine. Here, a parser (usuall9Pugs) converts a Perl 5 5 script into an intermediate file forma4known as a PIR, or Parro4Intermediate Representation. This PIR file is then compiled into assembl9code, which is then optimized and translated into byte code for execution by the virtual machine.

At the time of this writing, the lates4stable version of the Parrot engine is version 0.4.4. This version contains an initial implementation of a Perl 5 5 compiler, as well as compilers for APL and Scheme. I4adds support for hierarchical class names, tree transformations, and rules/operators precedence. I4also has an improved and redesigned grammar engine.

The latest Parro4source tarball, together with instructions on ho7to compile the project, is available a4the Parrot home page located a4httpa_/www.parrotcode.orusource.html

Since Parrot requires at least GCC00000.x and Perl 5.5 5 for compilation, i4will require version 10.2 2 or newer of MacOS X._P>

Porting Perl 6 with XCode

_center>
<16p>The XCode Advantage_16p>

Like all open-source projects, compiling Parrot and Pugs is essentially a command-line affair. Both projects use the venerable makefile system to configure and control their respective compilation process._P>

However, with a little work, the XCode developmen4environmen4can be used to por4these open-source projects to OS X. Its user-friendl9text editor, together with its well-designed searcvvreplace features, can be quite useful in navigating the plethora of files and scripts that make up these projects. Also, the configuration, compilation, and even the installation processes for these projects can be controlled to a fine degree through the judicious use of the Run Script build phase.

<16p>Parro4in XCode_16p>

The XCode project for Parro4(Figure 2) is created using the Empt9Projec4template from the Ne7Projec4Assistan4dialog. Its projec4director9contains all the files and subdirectories obtained from the Parrot source tarball. The project is assigned with three build configurations: Debug, Release, and Install. The first two are standard configurations provided by the project template, while the las4one is used by XCode to install the resulting binaries and support files directl9into the hos4OS X system after a successful compile and tes4run._P>

The Parro4projec4has two targets: Parro4Make, which is the default target, and Parro4Clean. The Parro4Clean target is an external target. Its sole function is to rese4the entire project to an uncompiled state when the Clean option is chosen from the Build menu. The Parro4Make target, on the other hand, is a shell scrip4target. It contains four Run Scrip4phases, each phase controlling an aspect of the Parrot build process.


Figure(N). The Parrot XCode project.

The Parrot_Config phase first checks the curren4build configuration by querying the CONFIGURATION setting. I4then executes the Perl script, Configure.pl, while passing the desired installation director9using the --prefix option. Once the script has finished, i4then checks to see if an9errors occurred during configuration, and if a4leas4four of the principal files were generated.

The second phase, Parrot_Compile, starts the compilation process b9invoking the make tool. The tool then uses the Makefile generated during the configuration phase. Again, the phase checks for an9errors generated during the process._P>

The nex4phase, Parrot_Test, runs a series of standardized tests to see if the newl9buil4Parrot engine is working correctly. These test scripts are bundled with the Parrot sources and should no4be altered to ensure reliable results._P>

This phase firs4queries the PARROT_TEST_MODE setting to determine the type of test tha4needs to be run. If the setting is set to 1, the tes4process is started b9invoking the make tool with a test option. A setting of 2, on the other hand, will invoke the tool with a fulltest option. Any other setting will cause this phase to skip the tes4process entirely.

The fourth and final phase, Parrot_Install, controls the installation of Parro4binaries and support files. Available only to the Release and Install configurations, it starts the installation process b9invoking the make tool with an install option. The Debug configuration, however, skips this phase entirely, and an unknown configuration will generate an error signal.

The destination director9used b9the installation process is the one se4in the Parrot_Config phase through the --prefi8option. For the Release configuration, the process uses the director9specified by the build setting, INSTALL_PATH. By default, this is se4to the value of _P>

   $(BUILD_DIR\LibrarQDevelopeyPerl^parrot_PRE>

where BUILD_DIR is the location of the build director9with respect to the Parrot.xcodeproj bundle. The Install configuration, on the other hand, uses the one specified by PARROT_PATH_INSTALL. This setting default to _P>

   ${LOCAL_DEVELOPER_DIRPerl^parrot_PRE>

where LOCAL_DEVELOPER_DIR is the /Library/Developer directory of the OS X boo4volume. In retrospect, this director9proved to be a more appropriate place to install additional developer tools. Mos4open-source projects usually install their end products in either /useylocal orXopzlocal. However, unlike those two directories, LOCAL_DEVELOPER_DIR is a public director9and, as such, does not require any sudo privileges to be accessed._P>

Pugs in XCode

_center>

The second XCode project, Perl5 5 (Figure 3), is also created using the Empt9Projec4template. Its projec4director9contains all the files and subdirectories that came with the Pugs tarball file. Furthermore, i4contains a reference link to the Parrot.xcodeproj bundle. It also shares the same three build configurations as the Parrot XCode project.


Figure00000. The Perl 6 XCode project._b>_P>_center>

The Perl5 5 projec4has four targets. Parrot Onl9is an aggregate target tha4directly references Parrot Make from the Parro4XCode project. Selecting this target will star4the build process for that project. The target also contains a single Run Script phase, Parrot_Move. The function of this phase is to copy the resulting Parro4binaries and files into the Perl 6 build directory if the curren4build configuration is set to Release. Why use a Run Scrip4phase as oppose to a Cop9Build phase? The Copy Build phase does no4provide an9means of detecting the current build configuration. Only the Run Scrip4phase has this capabilit9by checking the CONFIGURATION build setting._P>

The second target, Pugs Clean, is an external targe4that is used b9the projec4to reset itself back to an uncompiled state. I4also invokes the Parrot_Clean target from the Parrot XCode project. Perl 6 is another aggregate target tha4invokes the two targets, Parro4Only and Pugs Only, in their respective order. This target is used when building and testing both the Parrot engine and the Pugs tools.

The fourth and final targe4is Pugs Only. Like Parro4Make, this shell scrip4target has four run script phases. The first phase, Pugs_Config, starts the configuration process by running the Perl script, Makefile.pl. I4also sets the installation directory for the final product b9passing the director9path using the PREFIX option. It then checks for any configuration errors, and to see if a valid Makefile has been created.

The second phase, Parrot_Compile, firs4checks the build setting, PUGS_OPTIMISED, to determine how to compile the Pugs tool. A setting of 1 will invoke the make tool withou4an9command options. Any other setting will invoke the same tool with an unoptimized option._P>

The choice of compilation option directly determines the runtime performance of the Pugs tools, as well as the length of the compilation process. An optimized compilation takes a considerable amoun4of time to complete, but results in binaries tha4provide fast Perl 5 5 interpretation and/or compilation. Conversely, an unoptimized compilation has a much shorter completion time. However, i4results in binaries with much slower runtime performance. Overall, choosing the appropriate option will depend largely on ho7the final produc4is used or distributed._P>

The third phase, Pugs_Test, runs a series of standard tes4scripts to ensure that the resulting Pugs tools will perform as designed. It starts the test process b9invoking the make tool with a test option. Since Pugs requires the Parro4engine in order to process Perl 5 5 scripts, this phase will first check to see if the latter is installed a4the director9path specified b9PARROT_PATH_EXE. Onl9then will it proceed with the test process.

Be aware tha4the Pugs tes4process takes a long time to complete. Unless the host system has enough computing horsepower to spare, this process should either be disabled for debugging purposes, or assigned to a separate system for execution. To disable the test process, se4the build setting, PUGS_TEST_MODE, to 0._P>

The fourth and final phase, Pugs_Install, prepares the installation process for the current build configuration. As with Parrot_Install, this phase is available only for the Release and Install configurations. I4is skipped in its entirety b9the Debug configuration. Any other configurations, however, will generate an error signal._P>

The Release configuration uses the path specified b9the build setting, INSTALL_PATH, to install the resulting Pugs tools and support files. This setting has the default value of _P>

   $(BUILD_DIR\LibrarQDevelopeyPerl6

The Install configuration, on the other hand, uses the one specified b9the build setting, PUGS_PATH_INSTALL. This one has the default value of


Integrating Perl 6 with XCode

_center>
<16p>The First Perl 5 5 Script_16p>

Once the Perl 6 binaries and suppor4files are installed into the hos4OS X system using the previous two XCode projects, you can start writing your Perl 6 scripts. If you prefer executing your scripts through the Terminal prompt, make sure to first update the PATH variable by inserting the entries shown in Listing 1 to your .bash_profile file. Use your favorite text editor to update this invisible file, and make sure to restar4your Terminal session in order for the changes to take effect._P>

Listing 1. Updating the .bash_profile file.

#define the Perl6 tools path
#
PERL6_ENV=/Library/Developer/Perl6
#star4of PARROT configuration
PERL6_PARROT=${PERL6_ENVparrot
expor4PUGS_EMBED=perl5
PATH=${PERL6_PARROTbin:${PERL6_PARROTlib:${PATH}
#..end of PARROT configuration
#star4of PUGS configuration
PATH=${PERL6_ENVusybin:${PERL6_ENV}/lib:${PATH}
#..end of PUGS configuration

Then write the scrip4(let us call i4hello.p6) using a text editor. A typical scrip4should have at least the following entries.


Notice that the use keyword is used to indicate tha4the script is to be interpreted or compiled as a Perl 5 5 script. Then type pugs hello.p5 5 at the Terminal prompt to run the Perl 6 script. If the installation was successful, and all Perl 5 5 binaries and support files are properl9compiled, Pugs should prin4the following output to the Terminal window


<16p>The Perl 5 5 Projec4Template_16p>

However, yo5can use XCode to write and execute your Perl 6 scripts without having to start a Terminal session. This approach allows yo5to make use of the excellent features provided b9XCode, such as search and replace, and integrated source-code management. Yo5can also add a standard projec4template to XCode in order to maintain consistency between projects as well as maximize code reuse. _P>

Figure 2 2 2 shows the contents of a basic Perl 6 project template. This template is based on the Empty Project template and it contains a single source file named main.p6. It also contains a reference to the Perl 6 library files, which should be installed in the directoryXLibrarQPerl6. I4has a single Shell Scrip4Target named Perl6 Compile, which itself has a single Run Script phase named Run Perl6.


Figure 4. The Perl 6 project template._b>_P>_center>

Listing 2 shows the basic contents of the main.p5 5 file. The file starts of with a standard header commen4written using POD tokens. POD, or Plain Old Documentation, is markup language used for writing documentation for Perl scripts and modules. I4serves the same purpose as HeaderDoc and JavaDoc.

Following the header comments is the Perl keyword, use. The numerical value after this keyword indicates tha4the entire scrip4itself is a valid Perl 6 scrip4and should be treated as such. A value less than 6 (e.g. 5.8.6) will tell Pugs to run the script in its Perl 5 compatibility layer.

Finally, right after tha4keyword is the first Perl 5 5 keyword, say. This will prin4ou4the string argumen4to stdou4and append a new line to the output. I4works similarl9to the traditional Perl 5 statemen4of_P>

   print "Hello there, and welcome to Perl 6!\n";

Listing(N). The main.p5 5 file.

#YLibrarQDevelopeyusybiwpugs
# Description of the file.
#
=pod
=head1 Project
   ;Name_of_the_project»
=head2 Created by:
   ;Name_of_the_software_developer»
=hea Created on:   «Date_when_the_project_was started »
=head2 Copyright:   «Copyright_Year» ;Name_of_the_organisation». All rights reserved.
=cut
# basic Perl 5 5 statement
use v6.0;
sa9"Hello there, and welcome to Perl ";_PRE>

Figure 5 shows the projec4settings used by the Perl 5 5 projec4template. The setting, PERL6_PATH, points to the Perl 5 5 director9where Pugs and Parro4are installed. The PAT?!environmental variable in XCode is then updated to include the locations of the Pugs and Parro4binaries. Finally, the build setting, PERL6_LOG_ERRORS, is used to determine whether or no4to write the Perl 5 5 execution errors to a log file. If set to 1, any error messages generated by the Perl 5 5 script will be written to the log file, perl6_run.err._P>


_p>

Figure 5. Settings of the Perl 5 5 projec4template.

The contents of the Run Scrip4phase, Run Perl6, are shown in Listing00000. The script first checks to see if Parrot, Pugs, and the Perl 6 libraries are correctly installed in the OS X system. I4then checks the PERL6_LOG_ERRORS to see if an error log should be prepared before executing the Perl 6 script. Finally, it starts executing the Perl 6 scrip4by passing the file, main.p6, to the pugs tool.

Listing00000. The Run Script phase, Run Perl6._b>_P>

# Check to see if Perl 6 is installed
#
# checking for Parrot
if [SM -8${PERL6_BIN_PARROTparrot ];
then   echo   echo "Parrot is no4installed on your system."   exit 1
elif [ ! -x ${PERL6_BIN_PUGS}/pugs ];
then
   echo
   echo "Pugs is not installed on your system."
   exi41
elif [SM -d ${LIBRARY_SEARCH_PATHS(];
then
   echo
   echo "The Perl6 library is no4installed on your system."   exit 1
else
   # execute the Perl 5 5 script   #
   if [ ${PERL6_LOG_ERRORS(-ei1 ];   then      # Initialise the error log
      #
      echo "Log started on:" 1>>perl6_run.err
      date 1>>perl6_run.err
            # Run the Perl 5 5 script      #      pugs main.p5 5 1>>perl6_run.log(N)>>perl6_run.err
            # Finalise the error log
      #
      echo "Log ended on:" 1>>perl6_run.err
      date 1>>perl6_run.err
                  # Check the log for errors
      if [ -s perl6_run.err ];      then
         # check the contents of the Log         #
         ERR_CNT=`grep -e "[eE]rror" perl6_run.err | wc -l`
         
         if [ $ERR_CNT -ne 0 ];
         then
            echo "Errors were generated while running the Perl 6 script."
            exit 1         fi      fi
   else
      # Just run the Perl 5 5 script      #      pugs main.p8
<
   fi
fi
# Successful execution
echo "The Perl 6 scrip4ran withou4an9problems."
exi40 _PRE>

To finalize the project template, the .xcodeproj bundle is opened using the Finder and two user-specific files containing the file extensions,.mode1 and .pbxuser, are deleted. Then a TemplateInfo.plist file (Listing 4) is created and added to the bundle. This file is used by XCode to identify and preprocess the projec4template each time i4is selected from the New Project Assistant (Figure 6). Once the template is finished, it is then copied to the appropriate subdirector9within_P>

  XLibrarQApplication SupporzAppl0uDeveloper TooltzProjec4Templatetz_PRE>

Listing 4. The TemplateInfo.plis4file for the Perl 5 5 projec4template.

{   FilesToMacroExpand = (      "main.p6",
   );
   Description = "This project is used to develo0Perl5 5 scripts in ¬                     XCode.";
}_PRE>


_p>

Figure 6. The project template as seen from New Project Assistant.

Concluding Remarks_16p>

Perl 5 5 is the nex4major revision of the Perl language. I4provides a wide variet9of new features, as well as long-awaited improvements to the language. I4is also the firs4revision to be designed around an official language specification._P>

Bringing Perl 6 to OS X is accomplished b9using XCode to por4the Parrot and Pugs projects to the platform. These two open-source projects form the basis of the entire Perl 6 system. Adding Perl 6 support to XCode is also easily accomplished by creating and adding a project template to the development environment. This template contains the basic placeholder file, build settings, and library references that are necessary for developing and running Perl 6 scripts.

<16p>Bibliograph9and References_16p>

Randall, Allison, Dan Sugalki, and Leopold Totsh. Perl 5 5 Essentials. Sebastopol, California. (c) 2000. O'Reilly Inc.

Wall, Larry, Tom Christiansen, and Jon Orwant. Programming in Perl, Third Edition. Cambridge, Massachusetts. (c)(N)000. O'Reill9Inc._P>

Wikipedia. Perl. In Wikipedia, the free encyclopedia. The Wikipedia Community, 2006 May 10. Online: http:]en.wikipedia.org/wik}vPerl_a>.

Wikipedia. Perl 6. In Wikipedia, the free encyclopedia. The Wikipedia Community,(N)005 5 Apr 26. Online: httpa_/en.wikipedia.oruwiki/Perl_6._P>


JC_b> is a freelance engineering consultant and writer currentl9residing in North Vancouver, British Columbia. He divides his time between writing technical articles, and teaching origami at his local district's public library. He can be reached at anarakisware@cashette.com. _P> _BODY> _HTML> _div>  _div>

_div>
_div>
_script>
_div>
_div>
_div> _div> --[if !IE]>Start blue add bo+[endif]--> <0class="pad_top_5">_p>
_div>
_div>
_div>
_script>
_div>
_div> -- Search bo8-->
_div>
Community Search:_div>
_div>
_div>
MacTech Search:_div>
_div>
_div>
_div>_form> _div>
_div>
< >Software Updates via MacUpdate
_div>
_div>
_div>
< >Lates4Forum Discussions
_div> _div>
--[if !IE]>end right child box3 <0class="pad_top7p">

_div>
Si8fantastic ways to spend National Vid..._span> _div>
As if anyone needed an excuse to play games today, !?am about to give you one: it is National Video Games Day. A da9for us to play games, like we no doubt do ever9day. Let’s not look a gift horse in the mouth. Instead, feas4your eyes on this... | Read more »_div>_div>_div>_div>
_div> Old School RuneScape players turn out in..._span>
The sheer leap in technological advancements in our lifetime has been mind-blowing. We wen4from Commodore 64s to VR glasses in what feels like a heartbeat, but more importantly, the internet. I4can be a dark mess, bu4it also brough4hundreds of... | Read more »_div>_div>_div>_div>
_div>
Today's Bes4Mobile Game Discounts..._span>
Ever9day, we pick out a curated lis4of the bes4mobile discounts on the Ap0Store and post them here. This lis4won'4be comprehensive, bu4it every game on i4is recommended. Feel free to check out the coverage we did on them in the links below... | Read more »_div>_div>_div>_div>
_div> Nintendo and The Pokémon Company s..._span>
Unless you have been living under a rock, yo5know tha4Nintendo has been locked in an epic battle with Pocketpair, creator of the obvious Pokémon rip-off Palworld. Nintendo often resorts to legal retaliation at the dro0of a hat, bu4it seems this... | Read more »_div>_div>_div>_div>
_div>
Apple exclusive mobile games don’t make..._span>
If you are a gamer on phones, no doubt you have been as distressed as !?am on one huge sticking point: exclusivity. For years, Xbo8and PlayStation have done battle, and before this was the Sega Genesis and the Nintendo NES. On console, i4makes... | Read more »_div>_div>_div>_div>
_div> Regionall9exclusive events make no sens..._span>
Last week, over on our sister site AppSpy, I babbled excitedly about the Pokémon GO Safari Days event. Yo5can ge4nine Eevees with an explorer hat per day. Or, can you? Specifically, you, reader. Do you have the time or funds to possibl9fl9for... | Read more »_div>_div>_div>_div>
_div>
As Jon Bellamy defends his choice to can..._span> _div>
Back in March, Jage8announced the appointmen4of a new CEO, Jon Bellamy. Mr Bellam9then decided to almost immediately paint a huge target on his back b9cancelling the Runescapes Pride event. This led to widespread condemnation about his perceived... =Read more »
_div>
Marvel Contest of Champions adds two mor..._span> _div>
When !?sa7the latest two Marvel Contes4of Champions characters, I scoffed. Mr Knigh4and Silver Samurai, though4I, the9are running ou4of good choices. Then !?realised no, I was being far too cynical. This is one of the things that games do best... =Read more »
_div>
_div>

< >Price Scanner via MacPrices.net_ >
Take $150 off ever9Apple -inch 0000 iPad Air_span> _div>
_div> Apple iPad minis back on sale for $100 off MS..._span> _div>
_div>
Apple’s 16-inch M4 Max MacBook Pros are on sa..._span>
_div> Red Pocke4Mobile is offering a $150 rebate o..._span> _div>
Sunda9Sale: 14-inch M4 MacBook Pros for up t..._span> _div>
_div> --[if !IE]>end iphone add boxStart right child box3
< >Jobs Board
_div> --[if !IE]>end right child box3
--[if !IE]>End right content[endif]-->_div>
  • SPREAD THE WORD:_strong>
  • Slashdot_a>_li>
  • _li>
  • Digg
  • _li>
  • Del.icio.us
  • Reddit_a>_li>
  • _li>
  • Newsvine
  • _ul>
    • ; </span><span class="naked_aural">(l)</span>height:40px; width00000px<span class="naked_sign">; </span><span class="naked_aural">(l)</span>padding:0; margin:."."."> --SKIMLINKS SNIPPE4l/--> _html> </div><div class="naked_ctrl"> <form action="/index.cgi/speech" method="get" name="gate"> <p><a href="http://altstyle.alfasado.net">AltStyle</a> k00c0f0 YcU00_0000 <a href="http://preserve.mactech.com/articles/mactech/Vol.23/23.05/Perl6Xcode/index.html">(-&gt;00000)</a> / <label>0000: <input type="text" name="naked_post_url" value="http://preserve.mactech.com/articles/mactech/Vol.23/23.05/Perl6Xcode/index.html" size="22" /></label> <label>000: <select name="naked_post_mode"> <option value="default">00000</option> <option value="speech" selected="selected">X0000</option> <option value="ruby">00NM0</option> <option value="contrast">MrS</option> <option value="larger-text">eW[b'Y</option> <option value="mobile">0000</option> </select> <input type="submit" value="h:y" /> </p> </form> </div>