The Fifth Woman: A Kurt Wallander Mystery

Henning Mankell, Author, Steven T. Murray, Translator New Press $24.95 (423p) ISBN 978-1-56584-547-3
Dr. Gerald Ashenden, ""Ireland's justly famous thoracic surgeon,"" is lucky to escape with only a broken shoulder after being trampled by his gray stallion, Thor, ridden by his pregnant granddaughter, Rowena Keegan, in this nominal cozy marred by clumsy, overheated dialogue (""That murderous attack on Gerald! Oh, no, Inspector! I did nothing of the kind!""), short, choppy chapters (81 in all) and improbable detail (a ""glass-fronted"" police station). Rowena's plucky American friend, language expert Torrey Tunet, is sure Rowena didn't run down her grandfather deliberately. But when someone shoots Thor with the tip of a knitting needle, causing the horse to throw Ashenden to his death, Torrey has her work cut out to prove Rowena's innocence. In her hunt for the real murderer, Torrey discovers that the doctor had a few skeletons in the closet: a blackmailing grandson, a jilted Danish girlfriend and a plot to induce abortion through an overdose of X-rays. Will Rowena get an abortion? Who's the father? Could it be a case of incest? Such questions as these generate some tension and suspense, but Deere, author of one previous mystery (The Irish Cottage Murder), has yet to learn how to convince--at the climax, the police gather a bunch of suspects together and question them as a group. The revelation that the killer used a child's popgun to shoot Thor with the knitting needle is the final absurdity, while the reason Thor attacked his master remains a mystery. (Aug.) THE FIFTH WOMAN: A Kurt Wallander Mystery Henning Mankell. New Press, $24.95 (432p) ISBN 1-56584-547-1 ~ At the start of this Swedish version of the station-house police procedural, set in the Sk ne district in the south of Sweden, Det. Kurt Wallander, who has just returned from an idyllic vacation in Rome, joins the hunt for the missing Holger Eriksson, an elderly poet. Finding the man's corpse in a ditch, impaled on sharpened bamboo stakes, brings Wallander back abruptly to the realities of crime in modern Sweden. While Wallander and his colleagues investigate the murder, another man is found dead in the local woods, making it clear that they have a brutal serial killer on their hands. The killer plans each murder carefully to ensure that the victim suffers for several days before dying. Who could hate these innocent-seeming men so much as to want to torture them to death? The police detectives must delve deeply into the victims' lives to find out what links them together and what might have made them a deadly enemy. Mankell takes the reader slowly and meticulously through the long investigation's progress, including frequent reversals. The policemen are constantly overworked and exhausted, but they make acute deductions and chase down every lead relentlessly. Mankell is a talented writer, and the translation by Steven Murray is graceful and colloquial, but the narrative is so bleak and brooding that it certainly qualifies as the darkest of Swedish noir. (Aug.) UNDER PRESSURE Abigail Reed. Forge, $6.99 (416p) ISBN 0-812-53928-1 ~ Reed's newest is a story of sexual harassment that begins when Karyn Christophe takes a job in the fashion department of Cybelle, a glamorous retail chain. There, Karyn's early days fuel her hopes that she can rebuild her life after a disastrous marriage, but trouble arises in the form of Lou Hechter, the department head. Brash and slimy, Lou has a penchant for harassing his female employees with lewd suggestions and even lewder acts. Unbeknownst to Karyn, he has been blackmailing her new boss, Cilla Westheim, into a secret sexual liaison for years. Tangled in her own web of shame and fear, Cilla is helpless to save Karyn, even as she watches the cycle begin again; in the end, it's Karyn who blows the whistle on Lou, after a near-rape that she has been prescient enough to catch on tape. Harassment has been too well covered in both fiction and nonfiction for this plot to generate much surprise, and the fashion theme also has a dated quality reminiscent of 1980s Steel or Krantz. But underneath the trendy subject and glossy surface, the book exudes an appealing emotional warmth. The love stories--between Karyn and her new beau, Roger; and Cilla and her younger lover, Shane--are charming and well detailed. (Aug.)
Reviewed on: 07/31/2000
Release date: 08/01/2000
Paperback - 432 pages - 978-1-56584-706-4
Analog Audio Cassette - 978-1-4332-1117-1
Compact Disc - 14 pages - 978-1-4332-1118-8
MP3 CD - 978-1-4332-1119-5
Pre-Recorded Audio Player - 978-1-4332-5977-7
Paperback - 583 pages - 978-0-09-953529-4
Paperback - 583 pages - 978-0-09-954636-8
Paperback - 448 pages - 978-1-4000-3154-2
Mass Market Paperbound - 654 pages - 978-0-307-94666-9
Compact Disc - 978-1-4708-1235-5
Downloadable Audio - 978-1-4332-4258-8
Open Ebook - 431 pages - 978-1-59558-612-4
Open Ebook - 608 pages - 978-1-4070-6442-0
Show other formats
FORMATS
The Best Books, Emailed Every Week
Tip Sheet!
MORE BOOKS YOU'D LIKE
X
EVAL ERROR: syntax error at (eval 2375) line 207, near ""Read more about "$ENV"
Global symbol "$author" requires explicit package name at (eval 2375) line 207.
Global symbol "$html_title" requires explicit package name at (eval 2375) line 211.
Global symbol "$html_title" requires explicit package name at (eval 2375) line 211.
Global symbol "$default_title" requires explicit package name at (eval 2375) line 211.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 212.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 212.
Global symbol "$default_description" requires explicit package name at (eval 2375) line 212.
Global symbol "$meta_keywords" requires explicit package name at (eval 2375) line 213.
Global symbol "$meta_keywords" requires explicit package name at (eval 2375) line 213.
Global symbol "$default_keywords" requires explicit package name at (eval 2375) line 213.
Global symbol "$html_title" requires explicit package name at (eval 2375) line 215.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 216.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 217.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 218.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 219.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 220.
Global symbol "$twitter_description" requires explicit package name at (eval 2375) line 221.
Global symbol "$twitter_description" requires explicit package name at (eval 2375) line 222.
Global symbol "$twitter_description" requires explicit package name at (eval 2375) line 223.
Global symbol "$twitter_description" requires explicit package name at (eval 2375) line 224.
Global symbol "$meta_keywords" requires explicit package name at (eval 2375) line 225.
Global symbol "$html_title" requires explicit package name at (eval 2375) line 227.
Global symbol "$meta_keywords" requires explicit package name at (eval 2375) line 228.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 229.
Global symbol "$last_modified" requires explicit package name at (eval 2375) line 230.
Global symbol "$last_modified" requires explicit package name at (eval 2375) line 231.
Global symbol "$html_title" requires explicit package name at (eval 2375) line 234.
Global symbol "$default_image" requires explicit package name at (eval 2375) line 235.
Global symbol "$meta_description" requires explicit package name at (eval 2375) line 236.
Global symbol "$twitter_creator" requires explicit package name at (eval 2375) line 241.
Global symbol "$twitter_creator" requires explicit package name at (eval 2375) line 242.
Global symbol "$twitter_title" requires explicit package name at (eval 2375) line 244.
Global symbol "$twitter_description" requires explicit package name at (eval 2375) line 245.
Global symbol "$default_image" requires explicit package name at (eval 2375) line 246.
syntax error at (eval 2375) line 260, near "}
 }"
(eval 2375) has too many errors.

Code:
line 1: package tmpevalpackage;
line 2: sub doEval { 
line 3: 	my(@sel,%data,$html_title,$meta_description,$meta_keywords,$default_title,$default_description,$default_keywords,$last_modified);
line 4: 	my($twitter_creator,$twitter_title,$twitter_description);
line 5: 	
line 6: 	$default_title = 'Book Reviews, Bestselling Books & Publishing Business News | Publishers Weekly';
line 7: 	$default_keywords = 'book news, book reviews, bestselling books, book bestsellers, book publishing, best selling books, list of books, book business, publishing business';
line 8: 	$default_description = 'Publishers Weekly is the international news website of book publishing and bookselling including business news, reviews, bestseller lists, commentaries and more.';
line 9: 	
line 10: 	my $default_image = "http://www.publishersweekly.com/images/data/IMG/img/000/000/1-3.PNG";
line 11: 	
line 12: 	# try the topic (or subtopic)
line 13: 	if($LayoutManager::url_resolved_values{'TOPIC_TREE.nickname'}) {
line 14: 		&Database::GetParentRow($LayoutManager::url_resolved_values{'TOPIC_TREE.nickname'},\%data);
line 15: 		if($data{'html_title'}) { $html_title = $data{'html_title'}; };
line 16: 		if($data{'meta_description'}) { $meta_description = $data{'meta_description'}; };
line 17: 		if($data{'meta_keywords'}) { $meta_keywords = $data{'meta_keywords'}; };
line 18: 
line 19: 		# we are in a subtopic get the topic and fill in missing fields
line 20: 		if($LayoutManager::url_values{'TOPIC'}) { 
line 21: 			&Database::Select('TOPIC_TREE','nickname',$LayoutManager::url_values{'TOPIC'},\@sel);
line 22: 			if(@sel == 1) {
line 23: 				&Database::GetRow($sel[0],'TOPIC_TREE',\%data);
line 24: 				if($data{'html_title'} && !$html_title) { $html_title = $data{'html_title'}; }
line 25: 				if($data{'meta_description'} && !$meta_description) { $meta_description = $data{'meta_description'}; }
line 26: 				if($data{'meta_keywords'} && !$meta_keywords) { $meta_keywords = $data{'meta_keywords'}; }
line 27: 			}
line 28: 		}
line 29: 	}
line 30: 
line 31: 	# fill in missing info from page
line 32: 	if($LayoutManager::url_resolved_values{'PAGE.description'}) {
line 33: 		&Database::GetParentRow($LayoutManager::url_resolved_values{'PAGE.description'},\%data);
line 34: 		if(!$html_title) { $html_title = $data{'html_title'}; };
line 35: 		if(!$meta_description) { $meta_description = $data{'meta_description'}; };
line 36: 		if(!$meta_keywords) { $meta_keywords = $data{'meta_keywords'}; };
line 37: 	}
line 38: 	
line 39: 	# article takes precidence over topic and subtopic
line 40: 	if($LayoutManager::url_resolved_values{'ARTICLE.nickname'}) {
line 41: 		&Database::GetParentRow($LayoutManager::url_resolved_values{'ARTICLE.nickname'},\%data);
line 42: 		$html_title = $data{'headline'};
line 43: 		if($data{'title_web'}) { $html_title = $data{'title_web'}; $twitter_title = $data{'title_web'}; };
line 44: 		if($data{'html_title'}) { $html_title = $data{'html_title'}; };
line 45: 		if($data{'abstract_web'}) { $meta_description = $data{'abstract_web'}; $twitter_description = $data{'abstract_web'}; };
line 46: 		if($data{'meta_description'}) { $meta_description = $data{'meta_description'}; };
line 47: 		if($data{'meta_keywords'}) { $meta_keywords = $data{'meta_keywords'}; };
line 48: 		$last_modified = &GetLastModified($data{'pub_date'});
line 49: 		
line 50: 		my($canonical,%topic_data,%sub_topic_data,%issue_data);
line 51: 		if($data{'the_topic'}) {
line 52: 			&Database::GetRow($data{'the_topic'},'TOPIC_TREE',\%sub_topic_data);
line 53: 			&Database::GetParentRow($sub_topic_data{'parent'},\%topic_data);
line 54: 			$canonical = "http://www.publishersweekly.com/pw/by-topic/$topic_data{'nickname'}/$sub_topic_data{'nickname'}/article/$data{'nickname'}.html";
line 55: 		}
line 56: 		else {
line 57: 			if($data{'issue'}) {
line 58: 				&Database::GetRow($data{'issue'},'ISSUE',\%issue_data);
line 59: 				$canonical = "http://www.publishersweekly.com/pw/print/$issue_data{'date'}/$data{'nickname'}.html";
line 60: 			}
line 61: 		}
line 62: 		if($data{'the_photo'}) {
line 63: 			my(%image_data);
line 64: 			&Database::GetRow($data{'the_photo'},'ARTICLE_PHOTO',\%image_data);
line 65: 			if($image_data{'photo__file'}) {
line 66: 				$default_image = "http://www.publishersweekly.com/images/data/$image_data{'photo__file'}";
line 67: 			}
line 68: 		}
line 69: 		if($canonical) {
line 70: 			&Templates::SetMeta("<link rel=\"canonical\" href=\"$canonical\" />");
line 71: 		}
line 72: 	}
line 73: 
line 74: 	# reviews by ISBN
line 75: 	if($LayoutManager::url_values{'ISBN'}) {
line 76: 		my($isbn,@sel,$work,%issue_data);
line 77: 		$isbn = $LayoutManager::url_values{'ISBN'};
line 78: 		
line 79: 		$isbn =~ s/\-//g;
line 80: 		$default_image = "https://booklife.com/image-factory/http/localhost/amazongetcover/$isbn.jpg/w204.jpg";
line 81: 
line 82: 		&Database::Select('WORK_INSTANCE','isbn_std',$isbn,\@sel);
line 83: 
line 84: 		if(@sel) {
line 85: 			$work = $sel[0];
line 86: 			@sel = ();
line 87: 			&Database::Select('REVIEW','book',$work,\@sel);
line 88: 			
line 89: 			# my $root = "images/cached/INGRAM";
line 90: 			# my $row_path = $isbn;
line 91: 			# $row_path =~ s/^(...)(...)(...)(.*)/$1\/$2\/$3/;
line 92: 
line 93: 			# if(-e "/disk02/PW/htdocs/$root/$row_path/$isbn\.jpg"){
line 94: 			#	 $default_image = "http://www.publishersweekly.com/$root/$row_path/$isbn\.jpg";
line 95: 			# }
line 96: 			
line 97: 			if(@sel) {
line 98: 				&Database::FetchRow($sel[0],'REVIEW',\%data);
line 99: 				my($tmp) = $data{'info_line'};
line 100: 				$tmp =~ s/<[^>]+>//g;
line 101: 				$html_title = "$data{'category'} Book Review: $data{'title'} by $tmp";
line 102: 				$meta_description = substr($data{'body'},0,200);
line 103: 				if($data{'pub_date'}) {
line 104: 					$last_modified = &GetLastModified($data{'pub_date'});
line 105: 				}
line 106: 				else {
line 107: 					&Database::GetRow($data{'issue-UNRESOLVED'},'ISSUE',\%issue_data);
line 108: 					$last_modified = &GetLastModified($issue_data{'date'});
line 109: 				}
line 110: 
line 111: 				$twitter_creator = '@publisherswkly';
line 112: 				$twitter_title = $data{'title'};
line 113: 				$twitter_description = $meta_description;
line 114: 			}
line 115: 		}
line 116: 	}
line 117: 	
line 118: 	# reviews
line 119: 	if($LayoutManager::url_resolved_rows{'REVIEW.nickname'}) {
line 120: 		my(%issue_data);
line 121: 		&Database::FetchRow($LayoutManager::url_resolved_rows{'REVIEW.nickname'},'REVIEW',\%data);
line 122: 		my($tmp) = $data{'info_line'};
line 123: 		$tmp =~ s/<[^>]+>//g;
line 124: 		$html_title = "$data{'category'} Review: $data{'title'} by $tmp";
line 125: 		$meta_description = substr($data{'body'},0,200);
line 126: 		
line 127: 		$twitter_creator = '@publisherswkly';
line 128: 		$twitter_title = $data{'title'};
line 129: 		$twitter_description = $meta_description;
line 130: 		
line 131: 		if($data{'pub_date'}) {
line 132: 			$last_modified = &GetLastModified($data{'pub_date'});
line 133: 		}
line 134: 		else {
line 135: 			&Database::GetRow($data{'issue-UNRESOLVED'},'ISSUE',\%issue_data);
line 136: 			$last_modified = &GetLastModified($issue_data{'date'});
line 137: 		}
line 138: 
line 139: 		if($data{'book-UNRESOLVED'}){
line 140: 			my (%instance_data);
line 141: 			&Database::GetRow($data{'book-UNRESOLVED'},'WORK_INSTANCE',\%instance_data);
line 142: 			
line 143: 			my $tmpisbn = $instance_data{'isbn_std'};
line 144: 			$tmpisbn =~ s/\-//g;
line 145: 			$default_image = "https://booklife.com/image-factory/http/localhost/amazongetcover/$tmpisbn.jpg/w204.jpg";
line 146: 
line 147: 			# my $root = "images/cached/INGRAM";
line 148: 			# my $row_path = $instance_data{'isbn_std'};
line 149: 			# $row_path =~ s/^(...)(...)(...)(.*)/$1\/$2\/$3/;
line 150: 	
line 151: 			# if(-e "/disk02/PW/htdocs/$root/$row_path/$instance_data{'isbn_std'}\.jpg"){
line 152: 			# 	$default_image = "http://www.publishersweekly.com/$root/$row_path/$instance_data{'isbn_std'}\.jpg";
line 153: 			# }
line 154: 		}
line 155: 	}
line 156: 
line 157: 	if($Templates::in{'channel'} && $Templates::in{'podcast'}) {
line 158: 		my(%podcast_data);
line 159: 		&Database::GetRow($Templates::in{'podcast'},'PODCAST',\%podcast_data);
line 160: 		$html_title = $podcast_data{'title'};
line 161: 		if($podcast_data{'description'}) { $meta_description = $podcast_data{'description'}; }
line 162: 		if($podcast_data{'image__file'}) {
line 163: 			$default_image = "http://www.publishersweekly.com/images/data/$podcast_data{'image__file'}";
line 164: 		}
line 165: 		$last_modified = &GetLastModified($podcast_data{'date_posted'});
line 166: 	}
line 167: 	
line 168: 	if($Templates::path =~ /\/bookit\//) {
line 169: 		if($Templates::in{'record'}) {
line 170: 			my(%data);
line 171: 			&Database::GetRow($Templates::in{'record'},'MARKETING_CALL',\%data);
line 172: 			$html_title = "$data{'headline'} | Publishers Weekly";
line 173: 		}
line 174: 		else {
line 175: 			$html_title = "BookIt | Publishers Weekly";	
line 176: 		}
line 177: 	}
line 178: 	if($Templates::path =~ /\/newsbrief\//) {
line 179: 		if($Templates::in{'record'}) {
line 180: 			my(%data);
line 181: 			&Database::GetRow($Templates::in{'record'},'NEWS_BRIEFS',\%data);
line 182: 			$html_title = "$data{'headline'}";
line 183: 			$twitter_title = "$data{'headline'}";
line 184: 			$meta_description = "$data{'abstract'}";
line 185: 			$twitter_description = "$data{'abstract'}";
line 186: 			if($data{'image__file'}) {
line 187: 				$default_image = "http://www.publishersweekly.com/images/data/$data{'image__file'}";
line 188: 			}
line 189: 		}
line 190: 		else {
line 191: 			$html_title = "BookIt | Publishers Weekly";	
line 192: 		}
line 193: 	}
line 194: 
line 195: 	if($Templates::path =~ /\/charlie\//) {
line 196: 			$html_title = "Publishers Weekly's Tribute to Freedom of Expression";
line 197: 			$twitter_title = "Publishers Weekly's Tribute to Freedom of Expression";
line 198: 			$meta_description = "Find out how to participate in a special section of the January 19 issue of Publishers Weekly and raise money for international nonprofits dedicated to freedom of expression.";
line 199: 			$twitter_description = "Find out how to participate in a special section of the January 19 issue of Publishers Weekly and raise money for international nonprofits dedicated to freedom of expression.";
line 200: 	}
line 201: 	
line 202: 	if($Templates::path =~ /\/authorpage\//) {
line 203: 		my $author = $LayoutManager::url_values{'AUTHORNAME'};
line 204: 		$author =~ s/-/ /g;
line 205: 		$author =~ s/([\w']+)/\u\L$1/g;
line 206: 		$html_title = "Books by $author and Complete Book Reviews";
line 207: 		$meta_description = "Read more about "" and other books by $author";
line 208: 	}
line 209: 
line 210: 	# use defailts is nothing else found
line 211: 	if(!$html_title) { $html_title = $default_title; };
line 212: 	if(!$meta_description) { $meta_description = $default_description; };
line 213: 	if(!$meta_keywords) { $meta_keywords = $default_keywords; };
line 214: 	
line 215: 	$html_title =~ s/\"//g;
line 216: 	$meta_description =~ s/\"//g;
line 217: 	$meta_description =~ s/<\/[^>]*>//g;
line 218: 	$meta_description =~ s/<[^>]*>//g;
line 219: 	$meta_description =~ s/<\/[^>]*//g;
line 220: 	$meta_description =~ s/<[^>]*//g;
line 221: 	$twitter_description =~ s/<\/[^>]*>//g;		
line 222: 	$twitter_description =~ s/<[^>]*>//g;
line 223: 	$twitter_description =~ s/<\/[^>]*//g;		
line 224: 	$twitter_description =~ s/<[^>]*//g;		
line 225: 	$meta_keywords =~ s/\"//g;
line 226: 	
line 227: 	&Templates::SetTitle($html_title);
line 228: 	&Templates::SetMeta("<meta name=\"keywords\" content=\"$meta_keywords\">");
line 229: 	&Templates::SetMeta("<meta name=\"description\" content=\"$meta_description\">");
line 230: 	if($last_modified) {
line 231: 		&Templates::SetMeta("<meta http-equiv=\"last-modified\" content=\"$last_modified\">");	
line 232: 	}
line 233: 	&Templates::SetMeta("<meta property=\"og:type\" content=\"article\"/>"); 
line 234: 	&Templates::SetMeta("<meta property=\"og:title\" content=\"$html_title\"/>"); 
line 235: 	&Templates::SetMeta("<meta property=\"og:image\" content=\"$default_image\"/>"); 
line 236: 	&Templates::SetMeta("<meta property=\"og:description\" content=\"$meta_description\"/>");
line 237: 	&Templates::SetMeta("<meta property=\"og:site_name\" content=\"PublishersWeekly.com\"/>"); 
line 238: 
line 239: 	&Templates::SetMeta("<meta name=\"twitter:card\" content=\"summary\"/>");		
line 240: 	&Templates::SetMeta("<meta name=\"twitter:site\" content=\"\@publisherswkly\"/>");		
line 241: 	if($twitter_creator){
line 242: 		&Templates::SetMeta("<meta name=\"twitter:creator\" content=\"$twitter_creator\"/>");			
line 243: 	}
line 244: 	&Templates::SetMeta("<meta name=\"twitter:title\" content=\"$twitter_title\"/>");
line 245: 	&Templates::SetMeta("<meta name=\"twitter:description\" content=\"$twitter_description\"/>");			
line 246: 	&Templates::SetMeta("<meta name=\"twitter:image\" content=\"$default_image\"/>"); 
line 247: 
line 248: 	
line 249: 	sub GetLastModified {
line 250: 		my($timestamp) = @_;
line 251: 		
line 252: 		my($mod);
line 253: 		
line 254: 		if(length($timestamp > 8)) {
line 255: 			$mod = substr($timestamp,0,4) . '-' . substr($timestamp,4,2) . '-' . substr($timestamp,6,2);
line 256: 		}
line 257: 		
line 258: 		return $mod;
line 259: 	}
line 260:  };
line 261: &doEval();
line 262: 1;