Announcement

Collapse
No announcement yet.

any perl wizards in here?

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • any perl wizards in here?

    I am by no means a perl wizard, but if you would describe the problem I can see if I can help!
    http://www.hardware-wiki.com - A wiki about computers, with focus on Linux support.

  • #2
    I have been known to write a perl line or too as well...

    --
    Paul Zastoupil

    Comment


    • #3
      quote:

      Originally posted by MarkG on 06-16-2000 12:50 PM
      I need some help...


      And he looks for a place to find a perl wiz, and comes to the logical conclusion - the best must reside among the Linux peeps. Quite true.

      Comment


      • #4
        Indeed...

        Comment


        • #5
          of course, what do stupid windows people know about perl?

          ok, I've added this code on one of the forums scripts which limits the numbers of threads one can make per X days to 1(this is enabled only for the off-topic forum)

          Code:
          # Multiple post per day check
          if (($Status ne "Administrator") && ($Status ne "Moderator")) {
          if ($number == 23) {
            $numDaysToWait = 1;
            @finalPList = ();
            $nowListTime = time;
            if (-e "$MembersPath/postedlist.cgi") {
              open (POSTED, "$MembersPath/postedlist.cgi");
                    @postedList = ;
                  close (POSTED);
                  foreach $hasPosted (@postedList) {
                    ($UserHP, $DateHP, $ForumNumHP) = split(/\|\!\|/, $hasPosted);
                    chomp($ForumNumHP);
                    if (($nowListTime - $DateHP) < ($numDaysToWait * 86400)) {
                      push @finalPList, $hasPosted;
                          if (($UserHP eq $UserName) && ($ForumNumHP == $number)) {
                            &StandardHTML("Sorry, but you may only post one new
          topic in this forum once every $numDaysToWait day.");
                            exit;
                          }
                    }
                  }
            }
            open (POSTED, ">$MembersPath/postedlist.cgi");
              print POSTED @finalPList;
                  print POSTED "$UserName|!|$nowListTime|!|$number\n";
            close (POSTED);
            chmod (0666, "$MembersPath/postedlist.cgi");
          }
          }
          I want to limit a poster to X number of threads for X days(instead of 1 thread for X days)

          I'm sure it's something easy, but above my level of perl knowledge

          Comment


          • #6
            any perl wizards in here?

            I need some help...

            Comment


            • #7
              I've never written a PERL program before, so I don't know how good or bad my style is, but this should do the job (give or take a few syntax errors).



              if ((($Status ne "Administrator") && ($Status ne "Moderator")) | | ($UserName ne "Mark von Wagner")) {
              if ($number == 23) {
              $numDaysToWait = 1;
              $numberOfThreads = 3;
              @finalPList = ();
              $nowListTime = time;
              if (-e "$MembersPath/postedlist.cgi") {
              open (POSTED, "$MembersPath/postedlist.cgi");
              @postedList = ;
              close (POSTED);
              $userFound = 0;

              foreach $hasPosted (@postedList) {
              @DateHPs = ();
              $slotsFound = 0;
              ($UserHP,$ForumNumHP,$DateHP) = split(/\|\!\|/, $hasPosted, 3);
              chomp($DateHP);
              for($counter1 = 0; $counter1 < $numberOfThreads; $counter1++) {
              ($dateTemp, $DateHP) = split(/\|\!\|/, $hasPosted, 2);
              push @DateHPs, $dateTemp;
              if(($nowListTime - $dateTemp) > ($numDaysToWait * 86400)) {
              $slotsFound++;
              }
              }
              if (($UserHP eq $UserName) && ($ForumNumHP == $number)) {
              $userFound = 1;

              if($slotsFound == 0) {
              &StandardHTML("Sorry, but you may only post $numberOfThreads new topics in this forum every 24 hours.");
              exit;
              }
              else {
              $flag1 = 0;
              $slotsFound = $slotsFound - 1;
              $hasPosted = sprintf("%s|!|%s", $UserHP,$ForumNumHP);
              foreach $dateTemp(@DateHPs) {
              if ((($nowListTime - $dateTemp) > ($numDaysToWait * 86400)) && ($flag1 == 0)) {
              $flag1 = 1;
              $dateTemp = $nowListTime;
              }
              $hasPosted = sprintf("%s|!|%d",$hasPosted,$dateTemp);
              }
              }
              push @finalPList, $hasPosted;
              }
              else if (($slotsFound < $numberOfThreads)) {
              $hasPosted = sprintf("%s|!|%s", $UserHP,$ForumNumHP);
              foreach $dateTemp(@DateHPs) {
              $hasPosted = sprintf("%s|!|%d",$hasPosted,$dateTemp);
              }
              push @finalPList, $hasPosted;
              }
              }
              if($userFound == 0){
              $oldListTime = $nowListTime - 86400 * numDaysToWait;
              $hasPosted = sprintf("%s|!|%s|!|%d", $UserHP,$ForumNumHP, $nowListTime);
              for($counter1 = 0; $counter1 < $numberOfThreads; $counter1++) {
              $hasPosted = sprintf("%s|!|%d",$hasPosted,$oldListTime);
              }
              push @finalPList, $hasPosted;
              }
              }
              open (POSTED, ">$MembersPath/postedlist.cgi");
              print POSTED @finalPList;
              close (POSTED);
              chmod (0666, "$MembersPath/postedlist.cgi");
              }
              }

              Edit: Corrected indenting
              [This message has been edited by Mark von Wagner (edited June 17, 2000).]
              main(i,_){for(!_||(--i,main(i+2,i["FHhhTBFHdhTBFBQT\2TBF&]zRF$hh*:FHhh+&FBIsbDF"]));
              i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_^=_,"\n")),_/=2);} /*- Mark -*/

              Comment


              • #8
                Now, I don't have time for a real review right now, but reading the first line

                if ((($Status ne "Administrator") && ($Status ne "Moderator")) | | ($UserName ne "Mark von Wagner")) {

                The last | | should be an &&
                http://www.hardware-wiki.com - A wiki about computers, with focus on Linux support.

                Comment


                • #9
                  actually, the | | ($UserName ne "Mark von Wagner") part shouldnt exist

                  thanks Mark I'll give it a try

                  Comment


                  • #10
                    minor problem 1
                    this code
                    Code:
                    				else if (($slotsFound < $numberOfThreads)) {
                    should be
                    Code:
                    				else { 
                    if (($slotsFound < $numberOfThreads)) {
                    with a } at the end of the if...

                    else if does not work on perl

                    [This message has been edited by MarkG (edited June 17, 2000).]

                    Comment


                    • #11
                      bgier problem: something is wrong and the scripts write wrong things on the file...

                      Comment


                      • #12
                        Sorry about the problems in my first version. As you can probably tell, I do most of my programming in C++, where things like "else if" are valid. Here is a corrected version that, at least in my tests, works correctly.



                        if (($Status ne "Administrator") && ($Status ne "Moderator")) {
                        if ($number == 23) {
                        $numDaysToWait = 1;
                        $numberOfThreads = 3;
                        $userFound = 0;
                        @finalPList = ();
                        $nowListTime = time;
                        if (-e "$MembersPath/postedlist.cgi") {
                        open (POSTED, "$MembersPath/postedlist.cgi");
                        @postedList = ;
                        close (POSTED);
                        foreach $hasPosted (@postedList) {
                        @DateHPs = ();
                        $slotsFound = 0;
                        ($UserHP,$ForumNumHP,$DateHP) = split(/\|\!\|/, $hasPosted, 3);
                        chomp($DateHP);
                        for($counter1 = 0; $counter1 < $numberOfThreads; $counter1++) {
                        ($dateTemp, $DateHP) = split(/\|\!\|/, $DateHP, 2);
                        push @DateHPs, $dateTemp;
                        if(($nowListTime - $dateTemp) > ($numDaysToWait * 86400)) {
                        $slotsFound++;
                        }
                        }
                        if (($UserHP eq $UserName) && ($ForumNumHP == $number)) {
                        $userFound = 1;

                        if($slotsFound == 0) {
                        &StandardHTML("Sorry, but you may only post $numberOfThreads new topics in this forum every 24 hours.");
                        exit;
                        }
                        else {
                        $flag1 = 0;
                        $slotsFound = $slotsFound - 1;
                        $hasPosted = sprintf("%s|!|%s", $UserHP,$ForumNumHP);
                        foreach $dateTemp(@DateHPs) {
                        if ((($nowListTime - $dateTemp) > ($numDaysToWait * 86400)) && ($flag1 == 0)) {
                        $flag1 = 1;
                        $dateTemp = $nowListTime;
                        }
                        $hasPosted = sprintf("%s|!|%d",$hasPosted,$dateTemp);
                        }
                        }
                        $hasPosted = sprintf("%s\n",$hasPosted);
                        push @finalPList, $hasPosted;
                        }
                        else {
                        if (($slotsFound < $numberOfThreads)) {
                        $hasPosted = sprintf("%s|!|%s", $UserHP,$ForumNumHP);
                        foreach $dateTemp(@DateHPs) {
                        $hasPosted = sprintf("%s|!|%d",$hasPosted,$dateTemp);
                        }
                        $hasPosted = sprintf("%s\n",$hasPosted);
                        push @finalPList, $hasPosted;
                        }
                        }
                        }
                        }
                        if($userFound == 0){
                        $oldListTime = $nowListTime - (86400 * $numDaysToWait);
                        $hasPosted = sprintf("%s|!|%s|!|%d", $UserName,$number, $nowListTime);
                        for($counter1 = 1; $counter1 < $numberOfThreads; $counter1++) {
                        $hasPosted = sprintf("%s|!|%d",$hasPosted,$oldListTime);
                        }
                        $hasPosted = sprintf("%s\n",$hasPosted);
                        push @finalPList, $hasPosted;
                        }
                        open (POSTED, ">$MembersPath/postedlist.cgi");
                        print POSTED @finalPList;
                        close (POSTED);
                        chmod (0666, "$MembersPath/postedlist.cgi");
                        }
                        }


                        [This message has been edited by Mark von Wagner (edited June 17, 2000).]
                        main(i,_){for(!_||(--i,main(i+2,i["FHhhTBFHdhTBFBQT\2TBF&]zRF$hh*:FHhh+&FBIsbDF"]));
                        i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_^=_,"\n")),_/=2);} /*- Mark -*/

                        Comment


                        • #13
                          quote:

                          Originally posted by MarkG on 06-17-2000 08:20 AM

                          else if does not work on perl

                          [This message has been edited by MarkG (edited June 17, 2000).]


                          I belive that the perl version of else if is elsif. It's been about a month since I was working with perl, so I may be wrong, but I don't think so Yep, I was right.

                          PS. Could I get the title freeciv porter?

                          ------------------
                          Andy Black
                          ----------
                          Mac Port manager for Freeciv
                          Andy Black

                          Comment


                          • #14
                            MarkG, have you gotten around to testing my modifications yet?
                            main(i,_){for(!_||(--i,main(i+2,i["FHhhTBFHdhTBFBQT\2TBF&]zRF$hh*:FHhh+&FBIsbDF"]));
                            i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_^=_,"\n")),_/=2);} /*- Mark -*/

                            Comment


                            • #15
                              not yet

                              Comment

                              Working...
                              X