On Thu, Dec 26, 2002 at 10:21:39PM -0800, Michael R. Wolf wrote: > > What do you think of material that has this material?
That it is not making effective use of the time available. Perl is a large language. There can never be "enough" time, so you have to be hard-hearted about what you'll spend the time on... Also, it presents error-prone ways of doing things when they can easily be done more safely. ie. it seems to prefer "tricks" rather than solid Software Engineering. > How would you present it to students in an "Intro to Perl Programming" > course? "I don't recommend doing this, but you might see it in other people's code, so I'll cover it quickly so you'll understand it if you see it." > What would you do about it if you were employed by the company that > wrote it? Whine. > What about if you contracted to them? Replace it with something more valuable, or at least be brisk and caveat it. > Changing the $#array also changes the length of the array > > Similar to using the pop function TMTOWTDI is nice, but a "clear" way is better than an "obsure" way. I'd teach the clear way and save the "obscure way" time for something else. > @teams = ("redsox","yankees", "bluejays","rockies","giants","mariners"); > print "Last element int he Array: $#teams\n"; Errr, the "last element in the array" is "mariners", not "5" :-) > print "\@teams has " .($#teams + 1). " elements\n"; print "\@teams has " . @teams . " elements\n"; will do the same thing, and avoid the possibility of the famous "off by one" class of mistakes. > This funciton is useful for loopping through the array But not as useful as foreach. > for($i=0; $i < $#teams+1; $i++) If you maintain the index yourself, you have the possibility of making a mistake. If you use foreach instead, perl will do the indexing for you. Machines don't make mistakes, people do, so it's better to leave it to a machine when possible. > To grow or shrink the array, you simply change the value of the last > index in the array That is the obscure way. The clear way it to just put in into the array (push/splice), and let perl grow it for you. (unless you anticipate the array becoming "very large", but beware of premature optimization... ) > Output: > > Elements 11 > 1, 2, 3, , 300, , , , , , Errr, where are all of the "uninitialized" warning messages? <grin> > - Get better performance behind the scenes by creating the array and > growing it to the required length first instead of building it > element by element. Beware, as above. > It is possible to empty an array by setting its length to a negative > number > @#array = -1; ^ ^ I'll ignore the typo. That's the obscure way. @array = (); # the clear way Is "job security" the primary objective of the class? <grin again> > -- > Michael R. Wolf > All mammals learn by playing! Some lessons are better learned later, when you time to kill. -- Tad McClellan SGML consulting [EMAIL PROTECTED] Perl programming Fort Worth, Texas