...
However, because the grep()
block removes /bin/sh
from any input line that contains it, it modifies the @users
list so that no user has /bin/sh
!
Compliant Solution Solution grep()
This compliant solution does the same thing but does not modify the the @users
array array.
Code Block | ||||
---|---|---|---|---|
| ||||
open( PASSWD, "<", "/etc/passwd") or croak "error opening /etc/passwd: stopped" my @users = <PASSWD>; my @shell_users = grep +(m|/bin/sh|), @users; foreach my $user (@shell_users) { $user =~ s|/bin/sh||; print "Shell User: $user"; } |
Compliant Solution apply()
This compliant solution does the same thing but uses List::MoreUtils::apply()
which guarantees not to modify its input list.
Code Block | ||||
---|---|---|---|---|
| ||||
open( PASSWD, "<", "/etc/passwd") or croak "error opening /etc/passwd: stopped"
my @users = <PASSWD>;
my @shell_users = List::MoreUtils::apply { s|/bin/sh|| } @users;
foreach my $user (@shell_users) {
print "Shell User: $user";
}
|
...