http://www.perlmonks.org?node_id=852722

anakin30 has asked for the wisdom of the Perl Monks concerning the following question:

Hi guys, i have a sample of code in here. can someone please explain to me what does this line below does... (($this_mail) = ($this_in =~ /(.*)/gio)); you may refer to the complete source code i have attached below Thanks in advanced...It's really urgent...can someone please help me!!!!
#!/usr/bin/perl # create compare output file for CoIn use Net::LDAP; use Net::LDAP::Util qw(ldap_error_name ldap_error_text); use Encode; $DEBUG = 2; $BASEDIR = "/log/sad/info/net/"; $INFILE = "$BASEDIR/test-contacts.dat"; $INFILE = "$BASEDIR/test.dat"; $NOW = `date +%Y%m%d`; chop ($NOW); $LOGFILE = "$BASEDIR/DP-contacts-$NOW.txt"; $ldapopts_host = "edsldap.dhl.com:389"; $ldapopts_root = "ou=users,o=dhl.com"; &Main; sub Main { $conn_in = Net::LDAP->new($ldapopts_host); die("server failed $ldapopts_host") unless $conn_in; $mesg = $conn_in->bind(dn => $ldapopts_bind,password => $ldapopts_ps +wd); &Debug( 1, "Connected to destination : $ldapopts_host\t$NOW" ); open( IN, "$INFILE" ); while( $this_in = <IN> ) { (($this_mail) = ($this_in =~ /(.*)/gio)); $this_user = $conn_in->search(base => $ldapopts_root, scope => "su +b", filter => "(|(mail=$this_mail)(mailAlternateAddress=$this_mail))" +, attr s => ['uid','mail','mailalternateaddress','cn','ou']); &Debug( 3, "Search:(|(mail=$this_mail)(mailAlternateAddress=$this_ +mail))"); if ($this_user->entries) { foreach $my_entry ($this_user->entries) { $entry_uid = $my_entry->get_value('uid'); $entry_mail = $my_entry->get_value('mail'); @all_alts = $my_entry->get_value('mailalternateaddress'); $my_alt_all = ""; foreach $entry_alt (@all_alts) { $my_alt_all .= $entry_alt; $my_alt_all .= ","; } chop($my_alt_all); $entry_cn = $my_entry->get_value('cn'); $entry_ou = $my_entry->get_value('ou'); &Debug( 1, "$entry_ou|$entry_uid|$entry_mail|$my_alt_all|$entr +y_cn"); } } else { &Debug( 2, "NOT FOUND: $this_mail"); } } $conn_in->unbind if $conn_in; close(IN); } #***************************** # Handle DEBUG #***************************** sub Debug { local( $level, $message ) = @_; if( $DEBUG >= $level ) { if( open( DB, ">> $LOGFILE" ) ) { print DB "\t" x ( $level - 1 ), $message, "\n"; print "\t" x ( $level - 1 ), $message, "\n"; close( DB ); }; }; };

Replies are listed 'Best First'.
Re: explain code
by toolic (Bishop) on Aug 03, 2010 at 19:21 UTC
    Great. You added code tags, but please do not start a new thread.

    See my other suggestions in: Re: explain code

Re: Can someone help me to explain the code below
by Anonymous Monk on Aug 03, 2010 at 19:30 UTC
Re: Can someone help me to explain the code below
by Anonymous Monk on Aug 03, 2010 at 19:59 UTC
    (($this_mail) = ($this_in =~ /(.*)/gio));

    That simply matches everything in $this_in and assigns it to $this_mail. More concisely:

    $this_mail = $this_in;

      When running under -T it will also make an untainted copy of the contents of $this_in in $this_mail (presuming $this_in was from a tainted source)</nit>

      $ perl -MScalar::Util=tainted -lT -e '($o)=$ENV{PWD}=~/(.*)/gio;print +tainted( $_ ) for ( $o, $ENV{PWD} )' 0 1

      (Not that that's the case here, but saying it's just a copy assignment isn't universally true . . .)

      Update: And before someone else outpedants me, as toolic points out above that should really be "... an untainted copy up to the first newline of the contents ..." :)

      The cake is a lie.
      The cake is a lie.
      The cake is a lie.

        Well, true, but <nit>
        We're untainting only to the extent that we're performing a function that Perl (uncritically) reads as untainting... but without any substantive untainting...

        In other words, <c>(($this_mail) = ($this_in =~ /(.*)/gio));<c> passes the entire tainted input without any attempt to cull out unacceptable content.

        </nit> (or is it merely a nit?)
      . does not match then newline character. So it's more like:
      $this_mail = $this_in; chomp $this_mail;
      A reply falls below the community's threshold of quality. You may see it by logging in.
    A reply falls below the community's threshold of quality. You may see it by logging in.