On Jun 11, David vd Geer Inhuur tbv IPlib said:
>open(FH, "< $groupfile");
>@usrs = <FH>;
>close FH;
>
> $htusr = (grep {/htuser: /} @usrs)[0] ;
> $phi = (grep {/phil: /} @usrs)[0] ;
> $al = (grep {/all: /} @usrs)[0] ;
That looks wasteful to me. You're looping over the data FOUR[1] times,
instead of just getting the data as you come across it in the file:
open FH, "< $groupFile";
while (<FH>) {
last if $htuser and $phil and $all;
$htuser = $_, next if /htuser: /;
$phil = $_, next if /phil: /;
$all = $_, next if /all: /;
}
close FH;
Now we only go through the data ONE time.
> @htuser = split(/ /, $htusr);
> @phil = split(/ /, $phi);
> @all = split(/ /, $al);
Why not do this in the loop above?
open FH, "< $groupFile";
while (<FH>) {
last if @htuser and @phil and @all;
@htuser = split, next if /htuser: /;
@phil = split, next if /phil: /;
@all = split, next if /all: /;
}
close FH;
> foreach $htuser(@htuser) {
> chomp $htuser;
> if ( "$pwuser" eq "$htuser" ) { $group = "iclab"; }
> }
This is ok, except a) useless use of chomp(), and b) useless use of quotes
around variables. But even moreso, you should probably use a hash instead
of an array for this.
my %usergroup;
my %groupname = (
htuser => 'iclab',
phil => 'phil',
all => 'all',
);
open FH, "< $groupFile";
while (<FH>) {
my ($grp, $members) = split /:\s*/;
$usergroup{$_} = $groupname{$grp} for split ' ', $members;
}
close FH;
This changes your problem to something MUCH simpler. Now you have a hash,
%usergroup, that you can search for the key matching the username $pwuser:
my $group = $usergroup{$pwuser} || "none";
See?
But I ask another question -- why can't you use the getpwnam() function
for this?
my $gid = (getpwnam $pwuser)[3];
my $group = getgrnam $gid;
# or
my $group = getgrnam +(getpwnam $pwuser)[3];
Unless you're devising your OWN group names, this is a much simpler (and
better) way to do things.
[1] once to read the file, three times in the grep()s
--
Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/
RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for? <tenderpuss> why, yansliterate of course.
[ I'm looking for programming work. If you like my work, let me know. ]
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]