Hi all,
I am relatively new to Perl. Was learning references and thought of creating
a script that will list the username and its list of domains from httpd.conf
(on a cpanel server). I am curious to know why line
if (/DocumentRoot \/home\/(\S+?)\//) {
works whereas
if (#DocumentRoot /home/(\S+?)/#) {
does not, in the below script. Kindly help. Seems I am missing something
simple here.
Regards,
Vimal
====================================
#!/usr/bin/perl
my $test;
my %virtualhost;
my @temp = ();
my $user;
open (FILE, " <httpd.conf") || die "Cannot open: $!";
while (<FILE>){
chomp;
$test=1 if /<VirtualHost/ ;
$test=0 if /^<\/VirtualHost/ ;
@temp=() if /^<\/VirtualHost/ ;
if ($test == 1){
push @temp, $1 if /ServerName (\S+)\s?/ ;
push @temp, $1 if /ServerAlias (?:(\S+)\s*)+/ ;
if (/DocumentRoot \/home\/(\S+?)\//) { # WORK FINE
# if (#DocumentRoot /home/(\S+?)/#) { # DOES NOT WORK
$user = $1;
$virtualhost{$user} = [] unless exists $virtualhost{$user} ;
push @{$virtualhost{$user}}, @temp;
@temp = ();
$test = 0;
}
}
}
close FILE;
print "APACHE REPORT \n\n\n";
foreach (sort keys %virtualhost) {
print " -> Username:\t$_ \n -> Domains:\t";
@temp = @{$virtualhost{$_}};
print "$_\n\t\t" foreach sort @temp;
print "\n";
}
====================================