in reply to Shift versus Sanity

I don't think shift is bad. I find myself using it in a lot of code, especially modules that I write for office use. In some subroutines, I find myself using 3-5 shifts. In one of my modules (Student::Server), I've done this:
sub usr_create { my $DC; Win32::NetAdmin::GetAnyDomainController('','CLC', $DC); my $obj = shift; my $usr_log_file = shift; my $params = shift; if ( $obj->usr_log($usr_log_file,$params) ) { return 0; } my $usr = $obj->_rand_user(); if ( not Win32::NetAdmin::UsersExist($DC,$usr) ) { $obj->usr_add($usr); } else { $obj->usr_create($usr_log_file,$params); } }
Most people would probably frown upon that usage, but I like it. If I only need one parameter (per variable), then it's much easier to avoid confusion about parameters. In the above sub, I expect an object, a filename, and an array ref (which contains the order of logging parameters). In other words, a call to usr_create would look like: $obj->usr_create('test.txt', [Last_Name, First_Name, State]); or even  $obj->usr_create('test.txt', $aref); shift'ing out the necessary parameters avoids silly things like having a user pass too many arguments to the sub. In that case, anything not shift'ed out is discarded.

Theodore Charles III
Network Administrator
Los Angeles Senior High
4650 W. Olympic Blvd.
Los Angeles, CA 90019
323-937-3210 ext. 224
perl -e "map{print++$_}split//,Mdbnr;"