Beispiel für die Angabe von Deutsch (Deutschland) in der Befehlszeile...
perl -CAS ChangeName.pm --spr de-DE
Beispiel für die Angabe von Deutsch (Deutschland) in einer unterstützten "YAML-Konfiguration“...
Language Tag: de-DE
Beispiel für die Angabe keiner festgelegten Sprache in der Befehlszeile...
perl -CAS ChangeName.pm --spr
Beispiel für die Angabe keiner festgelegten Sprache in einer unterstützten "YAML-Konfiguration“...
Language Tag:
Befehlszeilen-"Optionen" haben Vorrang vor "YAML-Konfigurationen“.
ChangeName.pm – Namen von Personen in „Dataset“-Datensätzen ändern.
# Datei in der Befehlszeile ausführen: perl ./ChangeName.pm # In der Befehlszeile mit Argumenten und Flags ausführen: perl -CAS ./ChangeName.pm MeinArchiv bob Bobbi vorname --exakt --ausführlich --live
Eine Datei mit mehreren Perl-Paketen, die jeweils bei einer Operation zum Ändern der mit einem EPrint verknüpften Namen innerhalb eines EPrints-Repositorys helfen.
Erfordert derzeit Perl 5.16 oder höher und wurde für EPrints 3.4.x entwickelt.
Der Hauptteil der Datei selbst legt globale Perl-Einstellungen fest, wie z. B. das zu verwendende Perl-Versions-Feature-Bundle und globale UTF-8-Kodierungsparameter, bevor eingebettete Pakete beginnen.
BEGIN-Blöcke greifen in der Ladereihenfolge ein, um sicherzustellen, dass die Variable der Zeichenkodierungsschicht zur Kompilierzeit geladen wird und dass die Sprachklassen vor allen Paketen geladen werden, die sie verwenden. Sprachklassen werden außerdem am Anfang des Skripts positioniert, sodass sie auch zur Kompilierzeit zuerst geladen werden, da einige Pakete zur Kompilierzeit aufgerufen werden und sie benötigen.
ChangeName.pm betrachtet die ersten vier in der Befehlszeile angegebenen Argumente als...
MeinArchiv
im obigen Beispiel "SYNOPSE (de-DE)"),bob
im obigen Beispiel "SYNOPSE (de-DE)"),Bobbi
im obigen Beispiel "SYNOPSE (de-DE)"),Vorname
“ oder den „Familienname
“ („vorname
“ im obigen Beispiel "SYNOPSE (de-DE)").Kann auch eine Reihe von Flags akzeptieren (vorangestellt durch zwei Bindestriche – wie die oben gezeigten Beispiele –-exakt
–-ausführlich
und –-live
). Die Flags und ihre Verwendung werden unter "OPTIONEN (de-DE)" beschrieben. Ihre Positionierung relativ zu den Argumenten sollte keine Rolle spielen.
Ermöglicht die Einstellung der Sprache über einen Sprachtag. z. B. de-DE
oder en-GB
.
--spr de-DE
Eine Liste der aktuellen Sprachpakete finden Sie unter "Sprachpakete".
Eine Liste der unterstützten Sprachen und ihrer Sprachtags finden Sie unter "Language Links" (Sprachlinks).
Ermöglicht die Einstellung des Speicherorts einer zu verwendenden YAML-Konfigurationsdatei z. ...
# Absoluter Pfad: --konfig /pfad/zu/yaml_konfig.yml # Relativer Pfad (relativ zum Verzeichnis, aus dem Sie den Befehl ausführen): --konfig yaml_konfig.yml
Siehe "YAML KONFIGURATION (de-DE)".
Stellt sicher, dass Änderungen wirksam werden.
Ohne dieses Flag wird das Skript standardmäßig im Probelaufmodus ausgeführt, in dem Änderungen nicht wirksam werden.
Gibt an, dass der Suchbegriff für die Suche, wenn er in der Befehlszeile angegeben wird, auch für nachfolgendes Suchen und Ersetzen als Groß-/Kleinschreibung-unabhängiger Suchwert interpretiert werden soll (Suchen innerhalb der Suchergebnisse über vollständige Übereinstimmungen, nicht über teilweise Übereinstimmungen).
Das bedeutet, dass Sie bei Verwendung dieses Flags bei der Such- und Ersetzungsoperation, die für die Suchergebnisse ausgeführt wird, nicht nach einem Suchwert gefragt werden.
Ihr allgemeiner anfänglicher Suchbegriff zum Abrufen von Suchergebnissen wird auch als Ihr nachfolgender spezifischer Suchwert für die Suche innerhalb Ihrer Suchergebnisse betrachtet, sodass dies eine exakte Suche ist (wenn auch ohne Berücksichtigung der Groß-/Kleinschreibung).
Bietet während der Operation zusätzliche aufschlussreiche Ausgaben.
Zeigt während der Ausführung ausführliche und Debugmeldungen an. Zeigt außerdem zu Debugzwecken die von Data::Dumper abgeleitete Protokollausgabe an. Verwenden Sie das Flag --kein_dumper
, um dies zu unterdrücken.
Wenn --ausführlich
oder --stacktrace
zusammen mit --debug
verwendet wird, wird nach jeder Debug-Meldung auch die EPrints->trace
-Ausgabe angezeigt. Verwenden Sie das Flag --kein_stacktrace
, um solche Stacktrace-Informationen zu unterdrücken.
Sollte das --debug
-Flag gesetzt sein, stellt dieses --stacktrace
-Flag sicher, dass neben jeder Protokollmeldung ein EPrints->trace
-Stacktrace angezeigt wird, es sei denn, dieses Flag wird durch ein Flag --kein_stacktrace
unterdrückt.
Verhindert die Anzeige von EPrints->trace
-Stacktraces, die andernfalls angezeigt würden, wenn entweder das Flag --debug
und das Flag --ausführlich
oder das Flag --debug
und das Flag --stacktrace
zusammen verwendet werden.
Verhindert die Anzeige von aus Data::Dumper abgeleiteten Protokollmeldungen, wenn das --debug
-Flag aktiviert ist.
Die Datei ChangeName.pm
hat bereits interne Konfigurationswerte festgelegt, die teilweise oder vollständig durch eine externe Konfigurationsdatei überschrieben werden können.
Eine externe Konfiguration wird automatisch aus jeder ChangeNameConfig.yml
-Datei (Groß-/Kleinschreibung beachten) geladen, die sich im selben Verzeichnis wie die Datei ChangeName.pm
befindet.
Alternativ können Sie eine benutzerdefinierte Konfigurationsdatei mit einem beliebigen Pfad und Dateinamen über die Option --konfig
verwenden, die in "OPTIONEN (de-DE)" beschrieben wird.
EPrints Perl Library Path: /opt/eprints3/perl_lib/ Language Tag: de-DE Fields to Search: - creators_name - contributors_name - editors_name Dataset to Use: eprint Force Commit Changes to Database: yes Search Field Match Type: IN Search Field Merge Type: ANY
Oben sind die derzeit unterstützten Konfigurationseinstellungen mit Beispielwerten aufgeführt. Sie können in Ihrer Konfiguration beliebig viele davon einschließen oder weglassen.
Bei den Namen der Konfigurationseinstellungen wird zwischen Groß- und Kleinschreibung unterschieden.
Dies ist der Pfad der Perl-Bibliothek Ihrer lokalen EPrints-Repository-Installation. Normalerweise handelt es sich um einen Ordner perl_lib
innerhalb des Ordners, in dem Sie Ihr EPrints-Repository installiert haben. In fast allen EPrints-Repositorien lautet er: /opt/eprints3/perl_lib/
.
Wenn Sie Ihre EPrints jedoch in einem ungewöhnlichen Ordner installiert haben, möchten Sie diese Einstellung möglicherweise in: /ungewöhnlichen_ordner/eprints3/perl_lib/
ändern.
Beachten Sie, dass sowohl das E als auch das P in EPrints hier im Namen der Einstellung („EPrints Perl Library Path“) groß geschrieben werden.
Bei den Namen der Konfigurationseinstellungen wird zwischen Groß- und Kleinschreibung unterschieden.
Dies ist die Sprache, die das Skript verwenden soll, ausgedrückt als Sprachtag. Eine Liste der unterstützten Sprachen, einschließlich ihrer Sprachtags, finden Sie im Abschnitt "Language Links" (Sprachlinks).
Die Sprache sollte ein einzelnes Sprach-Tag oder nichts sein.
Wenn das Feld nicht festgelegt ist, fehlt oder leer gelassen wird, wird das Skript mehrsprachig ausgeführt und verwendet alle unterstützten Sprachen.
Dies sind die Felder, die Sie innerhalb des von Ihnen gewählten Datensatztyps durchsuchen möchten. Derzeit sind die Standardsuchfelder creators_name
, contributors_name
und editors_name
. Sie können diese nach Belieben anpassen oder die Suchfelder auf nur eines dieser Felder beschränken.
Standardmäßig auf eprint
eingestellt – kann auf jeden Datensatz eingestellt werden, in dem Sie eine Suche durchführen und Namen ändern möchten. Dieses Skript wurde nur mit dem Datensatz eprint
getestet.
Nimmt ein yes
oder y
(ohne Berücksichtigung der Groß-/Kleinschreibung) an, um ein Commit zu erzwingen, oder etwas anderes (wie z. B. no
), um ein Commit nicht zu erzwingen.
Manchmal ist ein erzwungenes Commit erforderlich, damit Ihre Änderungen wirksam werden.
Dies ist hier online dokumentiert: https://wiki.eprints.org/w/API:EPrints/Search/Field#DESCRIPTION und kann einen der folgenden Werte haben:
(Abkürzung für Index). Behandeln Sie den Wert als eine Liste von durch Leerzeichen getrennten Wörtern. Suchen Sie im Volltextindex nach jedem einzelnen. Bei Betreffzeilen müssen Sie diese Betreffzeilen-IDs oder die ihrer Nachkommen im Betreffbaum abgleichen.
(Abkürzung für „equal“ [gleich]). Behandeln Sie den Wert als einzelne Zeichenfolge. Passen Sie nur die Felder an, die diesen Wert haben.
(Abkürzung für „exakt“). Wenn der Wert eine leere Zeichenfolge ist, wird nach leeren Feldern gesucht, anstatt dieses Suchfeld zu überspringen. Bei Betreffzeilen werden die angegebenen Betreffzeilen abgeglichen, nicht jedoch deren Nachkommen.
Wenn der Wert nicht leer ist.
Dies wird normalerweise nur intern verwendet und führt dazu, dass das betreffende Suchfeld keine Treffer liefert. Dies geschieht, ohne dass Verarbeitungsaufwand für eine gründliche Suche betrieben wird.
Dies ist auch hier online dokumentiert: https://wiki.eprints.org/w/API:EPrints/Search/Field#DESCRIPTION und kann einen der folgenden Werte haben:
Ordnen Sie ein Element nur dann zu, wenn alle durch Leerzeichen etrennten Wörter mit dem Element übereinstimmen.
Stimmt mit einem Element überein, wenn eines der durch Leerzeichen getrennten Wörter innerhalb des Werts mit dem Element übereinstimmt.
Beachten Sie, dass diese Einstellung keine Auswirkungen auf EX
-Übereinstimmungen hat, die immer mit dem gesamten Wert übereinstimmen.
Sie können das folgende YAML-Beispiel als Vorlage für Ihre eigene externe ChangeNameConfig.yml
-Datei (oder eine individuell benannte .yml
-Konfigurationsdatei) verwenden und es dann nach Bedarf anpassen:
# Dies ist eine YAML-Konfigurationsdatei: %YAML 1.2 # Drei Bindestriche, um ein neues YAML-Dokument zu beginnen. --- EPrints Perl Library Path: /opt/eprints3/perl_lib/ Language Tag: de-DE Fields to Search: - creators_name - contributors_name - editors_name Dataset to Use: eprint Force Commit Changes to Database: yes # Geben Sie für das Obige ein „yes“ oder „y“ # (ohne Berücksichtigung der Groß-/Kleinschreibung) ein, # um das Festschreiben zu erzwingen, # oder etwas anderes (z. B. „no“), # um das Festschreiben nicht zu erzwingen. Search Field Match Type: IN Search Field Merge Type: ANY # Der Parameter # „Search Field Match Type“ (Suchfeld-Übereinstimmungstyp) # kann einer der folgenden sein: # IN # (Abkürzung für Index). # Behandeln Sie den Wert als eine Liste von durch Leerzeichen getrennten Wörtern. # Suchen Sie im Volltextindex nach jedem einzelnen. # Bei Betreffzeilen müssen Sie diese Betreffzeilen-IDs # oder die ihrer Nachkommen im Betreffbaum abgleichen. # EQ # (Abkürzung für „equal“ [gleich]). # Behandeln Sie den Wert als einzelne Zeichenfolge. # Passen Sie nur die Felder an, die diesen Wert haben. # EX # (Abkürzung für „exakt“). # Wenn der Wert eine leere Zeichenfolge ist, # wird nach leeren Feldern gesucht, # anstatt dieses Suchfeld zu überspringen. # Bei Betreffzeilen werden # die angegebenen Betreffzeilen abgeglichen, # nicht jedoch deren Nachkommen. # SET # Wenn der Wert nicht leer ist. # NO # Dies wird normalerweise # nur intern verwendet # und führt dazu, # dass das betreffende # Suchfeld keine Treffer # liefert. # Dies geschieht, # ohne dass Verarbeitungsaufwand # für eine gründliche # Suche betrieben wird. # Der Parameter # „Search Field Merge Type“ (Suchfeld-Zusammenführungstyp) # kann einer der folgenden sein: # ALL # Ordnen Sie ein Element nur dann zu, # wenn alle durch Leerzeichen # etrennten Wörter # mit dem Element übereinstimmen. # ANY # Stimmt mit einem Element überein, # wenn eines der durch Leerzeichen # getrennten Wörter innerhalb des # Werts mit dem Element übereinstimmt. # „Search Field Merge Type“ (Suchfeld-Zusammenführungstyp) hat # keine Auswirkungen auf EX-Übereinstimmungen, # die immer mit dem gesamten Wert übereinstimmen. ... # Drei Punkte zum Beenden des aktuellen YAML-Dokument.
Diese Klassen enthalten ein sprachspezifisches Lexikon mit lokalisierten Konfigurationen, Token und Phrasen. Zusätzlich können in diesen Klassen auch POD-Übersetzungen enthalten sein.
Deutsch (Deutschland).
Englisch (Vereinigtes Königreich).
Paket, das nützliche Dienstprogramme und Funktionen speichert, die von anderen Paketen in dieser ChangeName.pm
-Datei verwendet werden.
Paket, das YAML-formatierte Standardkonfigurationseinstellungen speichert. Wird verwendet, wenn keine externe .yml
-Datei bereitgestellt wird, oder für Standardwerte, falls eine externe Datei eine Einstellung auslässt.
Paket, das die Konfiguration lädt.
Locale::Maketext-Projektklasse zum Laden von Sprachklassen.
Unsere eigene Sprachklasse für die Sprache, die wir verwenden werden. Ihr language_handle
-Attribut kann undefiniert bleiben, um alle unterstützten Sprachen zu verwenden.
Ermöglicht die Erstellung eines ChangeName::Log
-Objektinstanz, das über Methoden zum Protokollieren von ausführlichen, debug, stacktrace und Data::Dumper-Ausgaben in die log
methode eines EPrints::Repository
oder STDERR
verfügt.
Führt das Skript über die Befehlszeile aus oder startet den Vorgang über eine neue Modulino-Klasseninstanz.
Führt den Vorgang zur Namensänderung aus.
Andrew Mehta
Copyright ©2024, Andrew Mehta.
Dieses Programm ist kostenlose Software; Sie können es unter denselben Bedingungen wie Perl 5.40.0 weitergeben und/oder ändern. Weitere Einzelheiten finden Sie im vollständigen Text der Lizenzen über perlartistic und perlgpl. Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird, jedoch ohne jegliche Garantie; ohne die implizite Garantie der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
Example declaring English (United Kingdom) at the commandline...
perl -CAS ChangeName.pm --lang en-GB
Example declaring English (United Kingdom) within supported "YAML configuration"...
Language Tag: en-GB
Example declaring no set language at the commandline...
perl -CAS ChangeName.pm --lang
Example declaring no set language within supported "YAML configuration"...
Language Tag:
Commandline "options" take precedence over "YAML configurations".
ChangeName.pm - change people's names on dataset records.
# Run file at the command line: perl ./ChangeName.pm # Run at the command line with arguments and flags: perl -CAS ./ChangeName.pm MyArchive bob Bobbi given --exact --verbose --live
A file containing multiple Perl packages, that each help in an operation, for changing the names associated with an EPrint, within an EPrints repository.
Currently requires Perl 5.16 or higher, and designed with EPrints 3.4.x in mind.
The main body of the file itself, sets global Perl settings, such as the Perl version feature bundle to use, and UTF-8 encoding globals, before any embedded packages begin.
BEGIN
blocks intervene in load order, to ensure the encoding layer variable is loaded at compile time, and that the language classes are loaded before any packages that use them. Language classes are also positioned at the top of the script, so they are loaded first during compile time also, as some packages will be called at compile time, and need them.
ChangeName.pm considers the first four arguments provided at the commandline to be...
MyArchive
in the "SYNOPSIS (en-GB)" example above),bob
in the "SYNOPSIS (en-GB)" example above),Bobbi
in the "SYNOPSIS (en-GB)" example above),given
" name or "family
" name (given
in the "SYNOPSIS (en-GB)" example above).Can also accept a number of flags (preceded by two dashes - such as the --exact
--verbose
and --live
examples shown above). The flags and their usage are described under "OPTIONS (en-GB)". Their positioning relative to the arguments shouldn't matter.
Allows setting of language, by way of a language tag. i.e. en-GB
, or de-DE
.
--lang en-GB
See "Language Packages" for list of current language packages.
See "Language Links" for list of supported languages and their language tags.
Allows setting the location of a YAML configuration file to use. i.e. ...
# Absolute path: --config /path/to/yaml_config.yml # Relative path (relative to the directory you run the command from): --config yaml_config.yml
Ensures changes take effect.
Without this flag, the script will run in dry run mode by default, where changes do not take effect.
Indicates the search term, if provided on the command line, should be interpreted as a case insensitive find value too (finding via full matches, and not partial matches).
This means that when using this flag, you will not be prompted for a find value, in the find and replace operation on the search results. Your search term will be considered your find value too, making this an exact search (albeit case insensitive).
Provides additional insightful output during the operation.
Shows verbose and debugging messages during execution. Also shows Data::Dumper derived log output for debugging purposes. Use the --no_dumper
flag to suppress this.
When --verbose
or --trace
is used alongside --debug
, EPrints->trace
output will also be shown after each debug message. Use the --no_trace
flag to suppress such stacktrace information.
Should the debug flag be set, this trace flag will ensure an EPrints->trace
stacktrace is displayed alongside every log message, unless this flag is suppressed by a --no_trace
flag.
Prevents the display of EPrints->trace
stacktraces which would otherwise be shown when either the --debug
flag and --verbose
flag, or the --debug
flag and --trace
flag, are used together.
Prevents the display of Data::Dumper derived log messages when the debug flag is in effect.
The file has internal configuration values set already, and these can be overwritten partially, or in full, by an external configuration file.
An external configuration will be automatically loaded from any ChangeNameConfig.yml
file (case sensitive) found in the same directory as the ChangeName.pm
file.
Alternatively, you can use a custom configuration file, with any path and filename you wish, via the --config
option, described in "OPTIONS (en-GB)".
EPrints Perl Library Path: /opt/eprints3/perl_lib/ Language Tag: en-GB Fields to Search: - creators_name - contributors_name - editors_name Dataset to Use: eprint Force Commit Changes to Database: yes Search Field Match Type: IN Search Field Merge Type: ANY
Above are the currently supported configuration settings, with example values. You can include or omit as many of these as you wish, in your config.
The names of the configuration settings are case sensitive.
This is the path of your local EPrints Repository installation's Perl Library. It is typically a perl_lib
folder, within the folder you installed your EPrints Repository to. In almost all EPrints Repositories it will be: /opt/eprints3/perl_lib/
.
If you have installed your EPrints to an unusual folder, however, you may wish to alter this setting to: /unusual_folder/eprints3/perl_lib/
.
Note that both the E and the P in EPrints are capitalised here in the name of the setting (EPrints Perl Library Path).
This is the language the script is to use, expressed as a language tag. See "Language Links:" section for a list of supported languages, including their language tags.
The language, should be a single language tag, or nothing.
If the field is not set, missing, or left blank, the script will run multilingually, using all supported languages.
These are the dataset fields you wish to search. Currently, the default fields to search are creators_name
, contributors_name
and editors_name
and you are free to customise these how you wish, or restrict the fields searched to only one of these.
Defaults to eprint
- can be set to any dataset you wish to perform a search on, and change names in. This script has only been tested with the eprint
dataset.
Takes a yes
or y
(case insensitive) to force commit, or anything else (such as no
) to not force commit.
Force-committing is sometimes necessary to have your changes take effect.
This is documented online here: https://wiki.eprints.org/w/API:EPrints/Search/Field#DESCRIPTION and can be any one of the following values:
(Short for index). Treat the value as a list of whitespace-separated words. Search for each one in the full-text index. In the case of subjects, match these subject ids or those of any of their descendants in the subject tree.
(Short for equal). Treat the value as a single string. Match only fields which have this value.
(Short for exact). If the value is an empty string then search for fields which are empty, as oppose to skipping this search field. In the case of subjects, match the specified subjects, but not their descendants.
If the value is non-empty.
This is only really used internally, it means the search field will just fail to match anything without doing any actual searching.
This is also documented online here: https://wiki.eprints.org/w/API:EPrints/Search/Field#DESCRIPTION and can be any one of the following values:
Match an item only if all of the space-separated words in the value match.
Match an item if any of the space-separated words in the value match.
Note that this setting has no effect on EX
matches, which always match the entire value.
You can use the following example YAML as a template for your own external ChangeNameConfig.yml
file (or custom named .yml
config file), and then customise it as required:
# This is a YAML Configuration File: %YAML 1.2 # Three dashes to start new YAML document. --- EPrints Perl Library Path: /opt/eprints3/perl_lib/ Language Tag: en-GB Fields to Search: - creators_name - contributors_name - editors_name Dataset to Use: eprint Force Commit Changes to Database: yes # For the above, provide a yes or y (case insensitive) to force commit, # or anything else (such as no) to not force commit. Search Field Match Type: IN Search Field Merge Type: ANY # The "Search Field Match Type" parameter which can be one of: # IN # (short for index) # Treat the value as a list of whitespace-separated words. Search for each one in the full-text index. # In the case of subjects, match these subject ids or those of any of their descendants in the subject tree. # EQ # (short for equal) # Treat the value as a single string. Match only fields which have this value. # EX # (short for exact) # If the value is an empty string then search for fields which are empty, as oppose to skipping this search field. # In the case of subjects, match the specified subjects, but not their descendants. # SET # If the value is non-empty. # NO # This is only really used internally, it means the search field will just fail to match anything without doing any actual searching. # The "Search Field Merge Type" parameter can be one of: # ALL # Match an item only if all of the space-separated words in the value match. # ANY # Match an item if any of the space-separated words in the value match. # "Search Field Merge Type" has no effect on EX matches, which always match the entire value. ... # Three dots to end current YAML document.
These classes contain a language specific lexicon, containing localised configurations, tokens, and phrases. Additionally POD translations may also be included in these classes.
German (Germany).
English (United Kingdom).
Package storing useful utilities and functions, used by other packages in this ChangeName.pm
file.
ChangeName::Utilities - a collection of useful utilities and functions.
v2.0.6
# Name the utilities you wish to use... use ChangeName::Utilities qw( method_1 method_2 ); # Then use them... my $result = method_1($required_values);
Contains exportable subroutines that are useful utilities and functions for other packages in the ChangeName::
namespace.
----------------
----------------
Designed to be used with object instances. So...
# Can be written as either... $self->validate_class($thing => 'Desired::Class::Name'); # ...or... validate_class($self, $thing => 'Desired::Class::Name');
Takes an object, and a class name, as arguments - separated by a comma or fat comma as you wish.
Returns undef
if the $thing
is not of the desired class name. Returns $thing
if the $thing
is a valid class name.
Supports "ChangeName::Log (en-GB)" if $self
has a logger
method that returns a ChangeName::Log
instance whose ready
method returns true, indicating it is ready to begin being used to log with.
----------------
----------------
Designed to be used with object instances. So...
# Can be written as either... $self->valid_object($thing); # ...or... valid_object($self, $thing);
Takes a variable, and checks it is defined, and blessed into a class.
Returns undef
if not defined, or not blessed into a class; otherwise, returns $thing
.
Supports "ChangeName::Log (en-GB)" if $self
has a logger
method that returns a ChangeName::Log
instance whose ready
method returns true, indicating it is ready to begin being used to log with.
----------------
----------------
Example:
$self->get_options( commandline_arguments => $array_reference_1, expected_options => $hash_reference_of_hash_references_1, );
Convenience method. Takes a hash and passes it on to "process_commandline_arguments" and returns the first result - i.e. just an options hash reference, and not an arguments hash reference nor a no_input
boolean flag.
See "process_commandline_arguments" for more information.
----------------
----------------
Example:
$self->get_arguments( commandline_arguments => $array_reference_1, expected_arguments => $array_reference_2, );
Convenience method. Takes a hash and passes it on to "process_commandline_arguments" and returns only the second result - i.e. just an arguments hash reference, and not an options hash reference nor a no_input
boolean flag.
See "process_commandline_arguments" for more information.
----------------
----------------
Takes a hash of arguments, as follows...
$self->process_commandline_arguments( commandline_arguments => $array_reference_1, expected_options => $hash_reference_of_hash_references_1, expected_arguments => $array_reference_2, );
Example values are:
my $array_reference_1 = \@ARGV; # Special global variable containing commandline arguments. my $hash_reference_of_hash_references_1 = { simple_options => { help => 0, }, optional_strings => { language => undef, }, negatable_options => { verbose => 0, }, incremental_options => { trace => 0, }, }; my $array_reference_2 = # Names for your arguments # in order they appear: [ 'archive_id', 'search', 'replace', 'part', ];
You can see that the hash reference is expected to contain separate nested hash references, for each type of supported option. Presently supported are...
Akin to normal options. See "Simple-options" in Getopt::Long.
Akin to ':s' - see "Options-with-values" in Getopt::Long.
Akin to '!' - see "A-little-bit-less-simple-options" in Getopt::Long.
Akin to '+' - see "A-little-bit-less-simple-options" in Getopt::Long.
Supports multi-language options, where Locale::Maketext Lexicon key and value conventions, for localising options within a specific language package are as follows:
# Key # Value 'options.option_name' => 'option_name alternative_option_name short_option_name',
For example...
# Key # Value 'options.config' => 'config configuration conf',
Or simply...
# Key # Value 'options.verbose' => 'verbose',
The key always remains English. The value should be localised to the language. The value string can contain as many space separated alternatives as desired.
Returns a list containing an options hash reference, an arguments hash reference, and a no_input
flag.
my ($options, $arguments, $no_input) = $self->process_commandline_arguments(%hash);
The $no_input
flag should be considered a boolean, as it returns a true value if there are no arguments after options have been processed, and it returns a false value if there actually are arguments left, after options have been processed, and before arguments have been processed.
Designed to be used with object instances. So...
# Can be written as either... $self->process_commandline_arguments(%hash); # ...or... process_commandline_arguments($self, %hash);
Supports "ChangeName::Log (en-GB)" if $self
has a logger
method that returns a ChangeName::Log
instance whose ready
method returns true, indicating it is ready to begin being used to log with.
----------------
----------------
Designed to be used with object instances. So...
# Can be written as either... $self->list_to_regex_logical_or_string(@list); # ...or... list_to_regex_logical_or_string($self, @list);
Takes a list, makes each defined element regex safe, and joins it by the pipe character "|
".
Returns the joined string. This is of use within a regex "Logical Or" grouping, and so as to allow for easier appending to the string with further alternatives, grouping brackets are not included in the output, and will need to be added, to form a grouping.
For example:
my $acceptable_input = $self->list_to_regex_logical_or_string( 'given', 'family', ); my $matches_acceptable_input = qr/^($acceptable_input)$/;
As you see in the above example, the result is encased within brackets, to form a "Logical Or" grouping from the string.
----------------
----------------
Designed to be used with object instances. So...
# Can be written as either... my $valid_value = $self->is_populated_array_ref($value); # ...or... my $valid_value = is_populated_array_ref($self, $value); # Allowing for... if ($valid_value) { # do stuff - confident we have a populated array reference. };
Takes a $value
. If the $value
is found to be an array reference populated with one or more values (warning - these array values can be undef
) then it will return the original $value
passed in.
If the passed in $value
is found to not be an array reference, or to be an array reference that is empty, this method will return an undef
value.
----------------
----------------
Designed to be used with object instances. So...
# Can be written as either... my $valid_value = $self->is_populated_hash_ref($value); # ...or... my $valid_value = is_populated_hash_ref($self, $value); # Allowing for... if ($valid_value) { # do stuff - confident we have a hash reference with at least one hash key. };
Takes a $value
. If the $value
is found to be a hash reference populated with at least one key (warning - does not check for a hash value paired with the hash key) then it will return the original $value
passed in.
If the passed in $value
is found to not be a hash reference, or to be a hash reference without any hash keys, this method will return an undef
value.
----------------
----------------
Designed to be used with object instances. So...
# Can be written as either... my $valid_value = $self->is_populated_scalar_ref($value); # ...or... my $valid_value = is_populated_scalar_ref($self, $value); # Allowing for... if ($valid_value) { # do stuff - confident we have a scalar # that dereferences to a true or zero value # - i.e. not an empty string, nor undef. };
Takes a $value
. If the $value
is found to be a scalar reference populated with either a true value, or the number/character zero (i.e '0
') then it will return the original $value
passed in.
If the passed in $value
is found to not be a scalar reference, or to be a scalar reference that returns false and is not the number/character zero ('0
'), then this method will return an undef
value.
----------------
----------------
Designed to be used with object instances. So...
# Can be written as either... my $validated_value = $self->is_true_or_zero($value)? $value: undef; # ...or... my $validated_value = is_true_or_zero($self, $value)? $value: undef; # Allowing for... if ($validated_value) { # do stuff - confident we have a string # that contains either a true value # or the number/character zero (0). };
Takes a $value
. Checks it is defined and true, or defined and the number/character zero ('0
').
Returns a boolean value evaluating to true or false, depending on if these conditions have been met or not.
Warning - does not currently return the original $value
. This behaviour may change in a future update, to be more in keeping with other methods in this class.
----------------
----------------
Designed to be used with object instances. So...
# Can be written as either... my @array_of_array_refs = $self->chunkify($eprints_list); # ...or... my @array_of_array_refs = chunkify($self, $eprints_list);
This method, can help reduce processing strain, by breaking down an EPrints::List
object into "chunks" of no more than 100 list items, using EPrints::List
's slice
method.
A different chunk size limit to 100
can also be provided by passing in a number after the list object.
For example, to use chunks of no more than 50
items...
my @array_of_array_refs = $self->chunkify($eprints_list, 50);
You can also omit the expected $eprints_list
if $self
has a get_list_of_results
method that retrieves a valid EPrints::List
object.
For example:
foreach my $current_chunk_of_100_results ($self->chunkify) { # Do something with no more than 100 results at a time, # from the list of results returned by # the $self->get_list_of_results method. }
Returns an array of array references.
----------------
----------------
Convert an array reference to a text string, consisting of the items separated by a universal separator.stringify_array_ref
localisation value.
my $array_reference = [1,2,3]; $self->stringify_array_ref($array_reference); # Outputs "1, 2, 3" # when separator.stringify_array_ref language token # is set to a comma and a space.
Requires $self
to have a language
method that returns a "ChangeName::Language" instance with a localise
method.
Also expects a (considered to be universal to all languages) separator.stringify_array_ref
Lexicon key to be set in the "ChangeName::Languages" base class for language classes.
Package storing YAML formatted default configuration settings. Used if no external .yml
file is provided, or for default values should any external file omit a setting.
ChangeName::Config::YAML - Class containing default configuration settings for ChangeName.pm
in YAML format.
v2.0.6
use YAML::Tiny; use ChangeName::Config::YAML; my $config = Load(ChangeName::Config::YAML::data);
Class containing default configuration settings for ChangeName.pm
in YAML format. Consists of a single "data" method that returns a string.
----------------
----------------
Use the data method to return the yaml as a string:
my $yaml_string = ChangeName::Config::YAML::data;
This can then be loaded using YAML::Tiny's "Load" Function:
use YAML::Tiny; my $perl_data_structure = Load($yaml_string);
When external modules like YAML::Tiny are not available, you can use CPAN::Meta::YAML in Perl's Core, since it is based on YAML::Tiny. Bear in mind, CPAN::Meta::YAML is only ever envisaged to support CPAN metadata files, and may not support the full YAML standard.
use CPAN::Meta::YAML qw(Load); my $yaml_string = ChangeName::Config::YAML::data; my $perl_data_structure = Load($yaml_string);
These internal YAML configuration settings for ChangeName.pm
can easily be customised with the use of external YAML files. See "YAML CONFIGURATION (en-GB)" for more information on this.
This data
method contains the default fallback configuration settings for the ChangeName.pm
modulino file, so should not be edited to customise settings, and instead only be edited to change the fallback defaults the file uses, when external customisations are lacking, or relevant commandline "options" are not specified.
Package that loads configuration.
Locale::Maketext project class for loading language classes.
Our own language class for the language we will use. Its language_handle
attribute can be left undefined to use all supported languages.
Allows for creating a ChangeName::Log
object instance that has methods related to logging verbose, debug, stacktrace, and Data::Dumper output to an EPrints::Repository
's log
method, or STDERR
.
----------------
----------------
Checks if the Log
object is ready for use in logging.
Presently the readiness checks include checking that the instance has a valid "ChangeName::Language" object for its language
attribute.
The definition of readiness may change in future, and what will be constant always is that ready
is intended to mean the object instance is ready for use - i.e. for having debug
, verbose
or dumper
method calls.
Runs the script from the commandline, or starts the operation via a new Modulino class instance.
Performs the change name operation.
ChangeName::Operation - changes the name of a dataset record.
v2.0.6
use ChangeName; my $object = ChangeName::Operation->new(@object_params);
Contains methods that are part of the process of changing a name of a dataset record.
Loads the class when used in another script.
# Use in a unit test or other Perl Script: use ChangeName; my $object = ChangeName::Operation->new(@object_params);
See "new (ChangeName::Operation en-GB)" method for info on acceptable object parameters.
----------------
----------------
$class->start(%object_params);
The code in this class method, can serve as an example of how to use the object.
This method is equivalent to the following method chain:
# Construct new object, and begin program flow... ChangeName::Operation->new(@object_params)->search->prepare->display->confirm->change->finish;
This start method constructs a new ChangeName::Operation
object instance from the class (using the object parameters passed in and the "new" constructor)>, upon which the program flow methods are then called, like so...
----------------
----------------
# Construct new object, and begin program flow... my $object = ChangeName::Operation->new(@object_params);
Accepts parameters required for a new ChangeName::Operation
, and returns a new ChangeName::Operation
object, upon which program flow methods or setters and getters, can be called.
TODO - detail the object parameters accepted.
----------------
----------------
# Construct an object, and populate its my $object = ChangeName::Operation->new(@object_params)->search;
Performs an EPrints search, according to values set during ChangeName::Operation
object construction.
Returns the initial ChangeName::Operation
object, now with list_of_results
and records_found
object attributes set.
----------------
----------------
# Prepare for performing a find and replace operation... my $object = ChangeName::Operation->new(@object_params)->search->prepare;
Should search results have been retrieved (will return prematurely if not), it will process the search results in order to generate useful lists, and then attempt to refine the search down by setting or prompting for a specific name part.
If find and replace values have not already been set, it will prompt the user for them too.
----------------
----------------
To do.
----------------
----------------
To do.
----------------
----------------
To do.
----------------
----------------
To do.
Andrew Mehta
Copyright ©2024, Andrew Mehta.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5.40.0. For more details, see the full text of the licenses via perlartistic and perlgpl. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.