On Thu, Jul 14, 2016 at 10:50 AM, Darryl Philip Baker 
<darryl.ba...@northwestern.edu> wrote:
While not truly a beginner it feels that way after not doing anything 
substantial in Perl in many years.

I currently need a program to take Apache HTTPD configuration files in HTTPD 
2.2 syntax used in current production and convert them to HTTPD 2.4 syntax in 
future production. I will need to do this many times weekly until we cut over 
to the new systems. My first challenge is converting the permissions syntax:
        Order deny,allow
        Deny from all
To
        Require all denied

Why not go line by line? Not 100% certain on the Apache syntax, but in your 
while loop where you are processing line by line:

next if /Order\s+deny,\s*allow/i;  # Skip it in the output

if( /(\s*)Deny\s+from\s+all/i) {

    my $leading_whitespace = $1;  # Preserve whatever whitespace is in the file 
now, could be multiple tabs and or spaces

    print $leading_whitespace . "Require all denied";

}
Learning from that example I came up with:
$prevline = $_;                                 # Save current line for later 
if needed
# Change:
#       Order deny,all
#       Deny from all
# To:
#       Require all denied
# No matter what case the first letters are
if ( /Order\s+Deny,\s*Allow/i ) {
        next;
        chomp $_;
        if ( /(\s)Deny\s+from\s+All/i) {
                $whitespace = $1;
                print $whitespace, "Require all denied \# New Syntax\n";
                next;
                chomp $_;
        } else {
                print $prevline, " \# Old Syntax\n";
        }
}
It is not doing the expected. The “Order deny,allow” line is never output and 
where I want “Require all denied” the “Deny from all” is still being output.

Darryl Baker
PMOET -DAPS
X76674

Reply via email to