Perl 101 for EPrints

From EPrints Documentation
Revision as of 15:37, 28 July 2015 by (talk | contribs) (Retrieving data from a config file)
Jump to: navigation, search

Recommended books for learning Perl

Learning Perl, 6th Edition by Randal Schwartz, brian d foy, Tom Phoenix

Programming Perl: Unmatched power for text processing and scripting Fourth Edition Edition by Tom Christiansen, brian d foy, Larry Wall, Jon Orwant

Intermediate Perl Second Edition Edition by Randal L. Schwartz, brian d foy, Tom Phoenix

Retrieving data from a config file and function parameters in Perl

Example of a data config file under /cfg/cfg.d/

The data structure is an array of hashes

$c->{etd_ms}->{fields} = [
	{ tagname => 'etd_ms:type', type=> 'constant', value => "Electronic Thesis or Dissertation" },
	{ tagname => 'etd_ms:degree', type => 'compound', parts => [
		{ tagname => 'etd_ms:name', type => 'simple_text', eprint_fieldname => 'thesis_degree_name' },
		{ tagname => 'etd_ms:level', type => 'simple_text', eprint_fieldname => 'thesis_type' },
		{ tagname => 'etd_ms:discipline', type => 'simple_text', eprint_fieldname => 'department' },
		{ tagname => 'etd_ms:grantor', type => 'simple_text', eprint_fieldname => 'institution' },
	] },

Retrieving values from this config file in an "Example" export plugin under /plugins/EPrints/Plugin/Export/

               package EPrints::Plugin::Export::Example;
               use EPrints::Plugin::Export;
               @ISA = ( "EPrints::Plugin::Export" );
               my $fields = $session->get_conf('etd_ms','fields');					
               foreach my $field_conf (@{$fields})
		   my $tags = $plugin->generate_tag($eprint, $field_conf);			
		   foreach my $tag (@{$tags})
					push @dcdata, ($tag) if $tag; 

Supporting function that returns an arrayref

sub generate_tag {
	my ($plugin, $eprint, $field_conf) = @_;

	#Constant value
	if ($field_conf->{type} eq 'constant')
		return $plugin->generate_constant_tag($eprint, $field_conf);

Supporting function that generates a tag

sub generate_constant_tag{
	my ($plugin, $eprint, $field_conf) = @_;

	my $tag = $plugin->_simple_tag($field_conf, $field_conf->{value});
	return [ $tag ];

In perl,

$obj->function($arg1, $arg2)

is a semantically nicer way of saying

Class::function($obj, $arg1,$arg2)

In the example above, when we call:

              my $tags = $plugin->generate_tag($eprint, $field_conf);

It is equivalent to:

              my $tags = Example::generate_tag($plugin, $eprint, $field_conf);

This explains the three parameters listed in the top of the generate_tag function definition:

sub generate_tag {
	my ($plugin, $eprint, $field_conf) = @_;