The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Quiq::Unindent - Entferne Einrückung von "Here Document" oder String-Literal

SYNOPSIS

Klasse laden:

use Quiq::Unindent;

Eingerücktes "Here Document":

{
    $text = Quiq::Unindent->hereDoc(<<'    EOT');
    Dies ist
    ein Text
    EOT

    print $text;
}

Eingerücktes mehrzeiliges String-Literal:

{
    $text = Quiq::Unindent->string('
        Dies ist
        ein Text
    ');

    print $text;
}

Resultat in beiden Fällen:

Dies ist
ein Text

DESCRIPTION

Die Klasse stellt Methoden zur Verfügung, mit denen die in der Regel unerwünschte Einrückung von eingerückten mehrzeiligen String-Literalen und "Here Documents" entfernt werden kann.

METHODS

Klassenmethoden

hereDoc() - Entferne Einrückung von "Here Document"

Synopsis

$str = $class->hereDoc(<<'EOT');
    <Text>
EOT

$str = $class->hereDoc($char,<<'EOT');
    <Text>
EOT

Arguments

$char (optional)

Fortsetzungszeichen. Siehe Quiq::String->joinLines().

$text

Eingerückter Text.

Description

Entferne von allen Zeilen die tiefste Einrückung, die allen Zeilen gemeinsam ist, und liefere die resultierende Zeichenkette zurück, wobei

  • alle Sub-Einrückungen erhalten bleiben

  • alle Leerzeilen erhalten bleiben, auch am Anfang und am Ende

Ist der Ende-Marker eingerückt, muss dessen Einrückung bei der Vereinbarung des Markers angegeben werden. Siehe <<' EOT' in den Beispielen.

Examples

  1. Gegenüberstellung der Syntax

    {
        $text = Quiq::Unindent->hereDoc(<<'    EOT');
          Dies ist
          ein Text
        EOT
    }

    ist äquivalent zu

    {
        $text = <<'EOT';
    Dies ist
    ein Text
    EOT
    }
  2. Sub-Einrückungen und Leerzeilen

    {
        $text = Quiq::Unindent->hereDoc(<<'    EOT');
    
          Dies ist der
        erste Absatz.
    
          Dies ist ein
        zweiter Absatz.
    
        EOT
    }

    ergibt

    |
    |  Dies ist der
    |erste Absatz.
    |
    |  Dies ist ein
    |zweiter Absatz.
    |

    d.h. Sub-Einrückungen und Leerzeilen bleiben erhalten.

string() - Entferne Einrückung von mehrzeiligem String-Literal

Synopsis

$str = $class->string('
    <Text>
');

$str = $class->string($char,'
    <Text>
');

Arguments

$char (optional)

Fortsetzungszeichen. Siehe Quiq::String->joinLines().

$text

Eingerückter Text.

Description

Wie Methode hereDoc(), wobei über die Einrückung hinaus

  • der erste Zeilenumbruch am Anfang entfernt wird (sofern vorhanden)

  • die Leerzeichen am Ende entfernt werden (sofern vorhanden)

Diese (zusätzlichen) Manipulationen sorgen dafür, dass der Leerraum entfernt wird, der dadurch entsteht, wenn die Anführungsstriche auf einer eigenen Zeile stehen.

Examples

  1. Gegenüberstellung der Syntax:

    {
        $text = Quiq::Unindent->string('
            Dies ist
            ein Text
        ');
    }

    ist äquivalent zu

    {
        $text = 'Dies ist
    ein Text
    ';
    }
  2. Varianten

    $text = Quiq::Unindent->string(q~
        Dies ist
        ein Text
    ~);
    
    $text = Quiq::Unindent->string("
        Dies ist
        ein Text mit $variable
    ");
    
    $text = Quiq::Unindent->string(qq~
        Dies ist
        ein Text mit $variable
    ~);

trim() - Entferne Einrückung und Whitespace am Anfang und Ende

Synopsis

$strOut = $class->trim($strIn);
$strOut = $class->trim($char,$strIn);

Arguments

$char (optional)

Fortsetzungszeichen. Siehe Quiq::String->joinLines().

$strIn

Eingerückter Text.

Description

Wie die Methoden hereDoc() und string(), wobei über die Einrückung hinaus

  • alle Leerzeilen am Anfang entfernt werden

  • jeglicher Leerraum am Ende entfernt wird

Diese (zusätzlichen) Manipulationen sorgen dafür, dass der Text als solches - d.h. ohne Einrückung und ohne Leerraum am Anfang und am Ende - geliefert wird.

Die Methode ist speziell für die interne Bearbeitung eines mehrzeiligen, ggf. mit einer Einrückung versehenen Parameterns geeignet.

Examples

  1. Leerraum am Anfang und am Ende wird entfernt

    {
        $text = Quiq::Unindent->trim("
    
            SELECT
                *
            FROM
                person
            WHERE
                nachname = 'Schulz'
    
        ");
    }

    ergibt

    |SELECT
    |    *
    |FROM
    |    person
    |WHERE
    |    nachname = 'Schulz'
                            ^
                            kein Newline
  2. Interne Anwendung

    sub select {
        my ($self,$stmt) = @_;
    
        $stmt = Quiq::Unindent->trim($stmt);
        if ($self->debug) {
            warn $stmt,"\n";
        }
        ...
    }

    Aufruf mit eingerücktem String-Literal, das intern behandelt wird:

    $db->select("
        SELECT
            *
        FROM
            person
        WHERE
            nachname = 'Schulz'
    ");

trimNl() - Trim plus Newline

Synopsis

$strOut = $class->trimNl($strIn);
$strOut = $class->trimNl($char,$strIn);

Arguments

$char (optional)

Fortsetzungszeichen. Siehe Quiq::String->joinLines().

$strIn

Eingerückter Text.

Description

Wie die Methode trim(), jedoch wird am Ende genau ein Newline angehängt, sofern der Sting nicht leer ist.

VERSION

1.220

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2024 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.