On Thu, Jul 14, 2016 at 2:56 PM, Rob McAninch <rob.mcani...@gmail.com>
wrote:

>
>
> On Thu, Jul 14, 2016 at 1:24 PM, Darryl Philip Baker <
> darryl.ba...@northwestern.edu> wrote:
>
>> 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.
>>
>>
>>
> You never get to the nested if. (Not sure why they're nested). When the
> outside if statement is true you immediately call next, that will skip
> everything after it and go back to the nearest loop.
>
> By the way chomp $_ is not necessary as chomp does that when another
> variable is not specified.
>
> In /(\s)Deny\s+from\s+All/ That first \s will match only *one* white
> space character, probably not what you want.
>
> I believe for the Apache syntax to be correct you don't want to output a
> comment on the same line as a statement. Comments in Apache need to be on
> their own line.
>
> <http://rock13.com>
>


Your comment out Apache syntax and outputting a comment tells me I really
don't need to say much to you but to advise you to execute the code before
replying to the list ;) Comments can be anywhere in an application the
AUTHOR choices to place text with a leading "#".
Have a better day.

Reply via email to