#======================================
# libstring : librairie de fonctions de gestion de chaînes de caractères
# description :
#
# date:     31/07/2015
# version : 1.0
#======================================

package libstring;

use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);

$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = ();
@EXPORT_OK   = qw(trim ltrim rtrim count_sub_string replace replace_all left);


=head1 libstring

B<libstring> librairie de fonctions de gestion et de manipulation dde chaînes de caractères.


=begin html

Vous pouvez télécharger la librairie:  <a href="libstring.pm">libstring.pm</a>.

=end html

=over 3

=item * trim

=item * ltrim

=item * rtrim

=item * count_sub_string

=item * replace

=item * replace_all

=item * left

=back

=cut


#--------------------------------------------------------



#--------------------------------------

=head2 trim

supprime les espaces en tête et en fin de chaîne.

=cut
#--------------------------------------
sub trim() {
    my $string = shift;
    $string =~ s/^\s+//;
    $string =~ s/\s+$//;
    return $string;
}

#--------------------------------------

=head2 rtrim

supprime les espaces en fin de chaîne.

=cut
#--------------------------------------
sub rtrim() {
    my $string = shift;
    $string =~ s/\s+$//;
    return $string;
}

#--------------------------------------

=head2 ltrim

supprime les espaces en fin de chaîne.

=cut
#--------------------------------------

sub ltrim() {
    my $string = shift;
    $string =~ s/^\s+//;
    return $string;
}


#--------------------------------------

=head2 count_sub_string

B<count_sub_string> compte le nombre de fois qu'une chaîne est rencontrée dans une autre.

=cut
#--------------------------------------
sub count_sub_string {
  my $str = shift;
  my $sub = quotemeta(shift);
  my $count = () = $str =~ /$sub/g;
  return $count;
#  or return scalar( () = $str =~ /$sub/g );
}

#--------------------------------------

=head2 replace

B<replace> remplace la première occurence d'une chaine dans une autre.

=cut
#--------------------------------------
sub replace()
{
  my $string  = shift;
  my $find    = shift;
  my $replace = shift;

  my $pos = index($string, $find);
    substr( $string, $pos, length( $find ), $replace );

   return $string;
}

#--------------------------------------

=head2 replace_all

B<replace_all> remplace toutes les occurences d'une chaine dans une autre.

=cut

#--------------------------------------
sub replace_all()
{
  my $string  = shift;
  my $find    = shift;
  my $replace = shift;

  my $pos = index($string, $find);
  while ( $pos > -1 ) {
    substr( $string, $pos, length( $find ), $replace );
    $pos = index( $string, $find, $pos + length( $replace ));
  }
   return $string;
}

#--------------------------------------
=head2 left

B<left> retourne les n caractères à gauche de la chaîne.

=cut
#--------------------------------------

sub left()
{
  my $string  = shift;
  my $size  = shift;

  return substr($string,length($string)-$size);
}

#======================================

1;
